@@ -299,71 +299,70 @@ module json_module
299
299
! use_unformatted_stream
300
300
!
301
301
! DESCRIPTION
302
- ! If using GFortran and Unicode is enabled, then
302
+ ! If Unicode is not enabled, then
303
303
! JSON files are opened using access='STREAM' and
304
304
! form='UNFORMATTED'. This allows the file to
305
305
! be read faster.
306
306
!
307
+ ! SEE ALSO
308
+ ! * access_spec
309
+ ! * form_spec
310
+ !
307
311
! SOURCE
308
- #if defined __GFORTRAN__ && defined USE_UCS4
312
+ #ifdef USE_UCS4
309
313
logical ,parameter :: use_unformatted_stream = .false.
310
- character (kind= CDK,len=* ),parameter :: access_spec = ' SEQUENTIAL'
311
- character (kind= CDK,len=* ),parameter :: form_spec = ' FORMATTED'
312
314
#else
313
315
logical ,parameter :: use_unformatted_stream = .true.
314
- character (kind= CDK,len=* ),parameter :: access_spec = ' STREAM'
315
- character (kind= CDK,len=* ),parameter :: form_spec = ' UNFORMATTED'
316
316
#endif
317
317
! *********************************************************
318
318
319
- ! JSON file extension
320
- character (kind= CDK,len=* ),parameter ,public :: json_ext = ' .json' ! JSON file extension
321
-
322
- ! special JSON characters
323
- character (kind= CK,len=* ),parameter :: space = ' '
324
- character (kind= CK,len=* ),parameter :: start_object = ' {'
325
- character (kind= CK,len=* ),parameter :: end_object = ' }'
326
- character (kind= CK,len=* ),parameter :: start_array = ' ['
327
- character (kind= CK,len=* ),parameter :: end_array = ' ]'
328
- character (kind= CK,len=* ),parameter :: delimiter = ' ,'
329
- character (kind= CK,len=* ),parameter :: colon_char = ' :'
330
- character (kind= CK,len=* ),parameter :: bspace = achar (8 )
331
- character (kind= CK,len=* ),parameter :: horizontal_tab = achar (9 )
332
- character (kind= CK,len=* ),parameter :: newline = achar (10 )
333
- character (kind= CK,len=* ),parameter :: formfeed = achar (12 )
334
- character (kind= CK,len=* ),parameter :: carriage_return = achar (13 )
335
- character (kind= CK,len=* ),parameter :: quotation_mark = achar (34 )
336
- character (kind= CK,len=* ),parameter :: slash = achar (47 )
337
- character (kind= CK,len=* ),parameter :: backslash = achar (92 )
338
-
339
- ! Control characters, possibly in unicode
340
- integer , private :: i
341
- character (kind= CK,len=* ),parameter :: control_chars(32 ) = [(achar (i),i= 1 ,31 ), achar (127 )]
342
-
343
- ! for indenting (Note: jsonlint.com uses 4 spaces)
344
- integer (IK),parameter :: spaces_per_tab = 2
345
-
346
- ! find out the precision of the floating point number system
347
- ! and set safety factors
348
- integer (IK),parameter :: rp_safety_factor = 1
349
- integer (IK),parameter :: rp_addl_safety = 1
350
- integer (IK),parameter :: real_precision = rp_safety_factor* precision (1.0_RK ) + &
351
- rp_addl_safety
352
-
353
- ! Get the number of possible digits in the exponent when using decimal number system
354
- integer (IK),parameter :: real_exponent_digits = floor ( 1 + log10 ( &
355
- real (max (maxexponent (1.0_RK ),abs (minexponent (1.0_RK ))),&
356
- kind= RK) ) )
357
-
358
- ! 6 = sign + leading 0 + decimal + 'E' + exponent sign + 1 extra
359
- integer (IK),parameter :: max_numeric_str_len = real_precision + real_exponent_digits + 6
360
- ! real format set by library initialization
361
- character (kind= CDK,len=* ),parameter :: int_fmt = ' (I0)' ! minimum width format for integers
362
- character (kind= CK, len=* ),parameter :: star = ' *' ! for invalid numbers
319
+ ! *********************************************************
320
+ ! ****d* json_module/access_spec
321
+ !
322
+ ! NAME
323
+ ! access_spec
324
+ !
325
+ ! DESCRIPTION
326
+ ! If Unicode is not enabled, then
327
+ ! JSON files are opened using access='STREAM' and
328
+ ! form='UNFORMATTED'. This allows the file to
329
+ ! be read faster.
330
+ !
331
+ ! SEE ALSO
332
+ ! * use_unformatted_stream
333
+ ! * form_spec
334
+ !
335
+ ! SOURCE
336
+ #ifdef USE_UCS4
337
+ character (kind= CDK,len=* ),parameter :: access_spec = ' SEQUENTIAL'
338
+ #else
339
+ character (kind= CDK,len=* ),parameter :: access_spec = ' STREAM'
340
+ #endif
341
+ ! *********************************************************
363
342
364
- ! for allocatable strings:
365
- integer (IK),parameter :: chunk_size = 100 ! allocate chunks of this size
366
- integer (IK) :: ipos = 1 ! next character to read
343
+ ! *********************************************************
344
+ ! ****d* json_module/form_spec
345
+ !
346
+ ! NAME
347
+ ! form_spec
348
+ !
349
+ ! DESCRIPTION
350
+ ! If Unicode is not enabled, then
351
+ ! JSON files are opened using access='STREAM' and
352
+ ! form='UNFORMATTED'. This allows the file to
353
+ ! be read faster.
354
+ !
355
+ ! SEE ALSO
356
+ ! * use_unformatted_stream
357
+ ! * access_spec
358
+ !
359
+ ! SOURCE
360
+ #ifdef USE_UCS4
361
+ character (kind= CDK,len=* ),parameter :: form_spec = ' FORMATTED'
362
+ #else
363
+ character (kind= CDK,len=* ),parameter :: form_spec = ' UNFORMATTED'
364
+ #endif
365
+ ! *********************************************************
367
366
368
367
! *********************************************************
369
368
! ****d* json_module/var_type
@@ -1075,15 +1074,66 @@ end subroutine array_callback_func
1075
1074
public :: operator (==)
1076
1075
# endif
1077
1076
1078
- !
1079
- ! Note: the following global variables make this module non thread safe.
1080
- !
1077
+ ! JSON file extension
1078
+ character (kind= CDK,len=* ),parameter ,public :: json_ext = ' .json' ! JSON file extension
1079
+
1080
+ ! special JSON characters
1081
+ character (kind= CK,len=* ),parameter :: space = ' '
1082
+ character (kind= CK,len=* ),parameter :: start_object = ' {'
1083
+ character (kind= CK,len=* ),parameter :: end_object = ' }'
1084
+ character (kind= CK,len=* ),parameter :: start_array = ' ['
1085
+ character (kind= CK,len=* ),parameter :: end_array = ' ]'
1086
+ character (kind= CK,len=* ),parameter :: delimiter = ' ,'
1087
+ character (kind= CK,len=* ),parameter :: colon_char = ' :'
1088
+ character (kind= CK,len=* ),parameter :: bspace = achar (8 )
1089
+ character (kind= CK,len=* ),parameter :: horizontal_tab = achar (9 )
1090
+ character (kind= CK,len=* ),parameter :: newline = achar (10 )
1091
+ character (kind= CK,len=* ),parameter :: formfeed = achar (12 )
1092
+ character (kind= CK,len=* ),parameter :: carriage_return = achar (13 )
1093
+ character (kind= CK,len=* ),parameter :: quotation_mark = achar (34 )
1094
+ character (kind= CK,len=* ),parameter :: slash = achar (47 )
1095
+ character (kind= CK,len=* ),parameter :: backslash = achar (92 )
1096
+
1097
+ ! These were parameters, but gfortran bug (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65141)
1098
+ ! necessitates moving them here to be variables
1099
+ character (kind= CK,len= 4 ) :: null_str = ' null'
1100
+ character (kind= CK,len= 4 ) :: true_str = ' true'
1101
+ character (kind= CK,len= 5 ) :: false_str = ' false'
1102
+
1103
+ ! Control characters, possibly in unicode
1104
+ integer , private :: i_
1105
+ character (kind= CK,len=* ),parameter :: control_chars(32 ) = [(achar (i_),i_= 1 ,31 ), achar (127 )]
1106
+
1107
+ ! for indenting (Note: jsonlint.com uses 4 spaces)
1108
+ integer (IK),parameter :: spaces_per_tab = 2
1109
+
1110
+ ! find out the precision of the floating point number system
1111
+ ! and set safety factors
1112
+ integer (IK),parameter :: rp_safety_factor = 1
1113
+ integer (IK),parameter :: rp_addl_safety = 1
1114
+ integer (IK),parameter :: real_precision = rp_safety_factor* precision (1.0_RK ) + &
1115
+ rp_addl_safety
1116
+
1117
+ ! Get the number of possible digits in the exponent when using decimal number system
1118
+ integer (IK),parameter :: real_exponent_digits = floor ( 1 + log10 ( &
1119
+ real (max (maxexponent (1.0_RK ),abs (minexponent (1.0_RK ))),&
1120
+ kind= RK) ) )
1121
+
1122
+ ! 6 = sign + leading 0 + decimal + 'E' + exponent sign + 1 extra
1123
+ integer (IK),parameter :: max_numeric_str_len = real_precision + real_exponent_digits + 6
1124
+ ! real format set by library initialization
1125
+ character (kind= CDK,len=* ),parameter :: int_fmt = ' (I0)' ! minimum width format for integers
1126
+ character (kind= CK, len=* ),parameter :: star = ' *' ! for invalid numbers
1081
1127
1082
1128
! real string printing:
1083
1129
character (kind= CDK,len= :),allocatable :: real_fmt ! the format string to use for real numbers
1084
1130
! [set in json_initialize]
1085
1131
logical (LK) :: compact_real = .true. ! to use the "compact" form of real numbers for output
1086
1132
1133
+ !
1134
+ ! Note: the following global variables make this module non thread safe.
1135
+ !
1136
+
1087
1137
! exception handling [private variables]
1088
1138
logical (LK) :: is_verbose = .false. ! if true, all exceptions are immediately printed to console
1089
1139
logical (LK) :: exception_thrown = .false. ! the error flag
@@ -1095,11 +1145,9 @@ end subroutine array_callback_func
1095
1145
integer (IK) :: pushed_index = 0
1096
1146
character (kind= CK,len= 10 ) :: pushed_char = ' ' ! JW : what is this magic number 10??
1097
1147
1098
- ! These were parameters, but gfortran bug (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65141)
1099
- ! necessitates moving them here to be variables
1100
- character (kind= CK,len= 4 ) :: null_str = ' null'
1101
- character (kind= CK,len= 4 ) :: true_str = ' true'
1102
- character (kind= CK,len= 5 ) :: false_str = ' false'
1148
+ ! for allocatable strings:
1149
+ integer (IK),parameter :: chunk_size = 100 ! allocate chunks of this size
1150
+ integer (IK) :: ipos = 1 ! next character to read
1103
1151
1104
1152
contains
1105
1153
! *****************************************************************************************
@@ -6110,10 +6158,10 @@ end subroutine wrap_json_get_array_with_path
6110
6158
! calls will automatically be cleared.
6111
6159
!
6112
6160
! HISTORY
6113
- ! Jacob Williams : 01/13/2015 : added read from string option.
6114
- ! Izaak Beekman : 03/08/2015 : moved read from string to separate
6115
- ! subroutine, and error annotation
6116
- ! to separate subroutine
6161
+ ! * Jacob Williams : 01/13/2015 : added read from string option.
6162
+ ! * Izaak Beekman : 03/08/2015 : moved read from string to separate
6163
+ ! subroutine, and error annotation
6164
+ ! to separate subroutine.
6117
6165
!
6118
6166
! SOURCE
6119
6167
0 commit comments