fortio-namelist 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +266 -42
- data/fortio-namelist.gemspec +1 -1
- data/lib/fortio-namelist/fortran_namelist.rb +47 -12
- data/lib/fortio-namelist/fortran_namelist.tab.rb +35 -35
- data/spec/dump_spec.rb +51 -0
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d6be9628b6a286eac9e31901c71c0793928166b260040cbe93d2d902a8c93096
|
|
4
|
+
data.tar.gz: 80b6989bed8bb98e11ffae89a42fd6675f24454e7438287166915fb1fd56a0fc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3584a0f098e8f5ab224e02e01e60581483643034e25d326dcc04b5352c4ac1fdf1a83700cef61b012ba31b9822b1523707027c6aeb764789463a3465dd360eef
|
|
7
|
+
data.tar.gz: 37328c227c9aa6e927111056a98ca92a4651a3740944319f166c62d6e1a60cea194fcbf04de30d0f63d0b5136dfdcf3024c7ca2eb5aec353880b58d5dd64ef02
|
data/README.md
CHANGED
|
@@ -7,9 +7,9 @@ This is a library for reading and writing data in Fortran's namelist format. Wit
|
|
|
7
7
|
Features
|
|
8
8
|
--------
|
|
9
9
|
|
|
10
|
-
* Flexible parsing
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* Flexible parsing using Racc to support various dialects
|
|
11
|
+
* Options for controlling the format of the dump
|
|
12
|
+
* Represents the structure of a name list with a Hash object (easy to convert to JSON or YAML format)
|
|
13
13
|
|
|
14
14
|
Installation
|
|
15
15
|
------------
|
|
@@ -27,14 +27,14 @@ Usage
|
|
|
27
27
|
|
|
28
28
|
### Useful methods
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
The user only needs to remember the following two methods.
|
|
31
31
|
|
|
32
32
|
FortIO::Namelist.parse(input, group: nil)
|
|
33
33
|
FortIO::Namelist.dump(root, **format_options)
|
|
34
34
|
|
|
35
|
-
### Reading namelist
|
|
35
|
+
### Reading namelist string
|
|
36
36
|
|
|
37
|
-
To create a Hash object with namelist structure by reading a
|
|
37
|
+
To create a Hash object with namelist structure by reading a namelist string, use the following method.
|
|
38
38
|
|
|
39
39
|
FortIO::Namelist.parse(input, group: nil)
|
|
40
40
|
|
|
@@ -83,55 +83,28 @@ input = %{
|
|
|
83
83
|
|
|
84
84
|
### read all groups
|
|
85
85
|
root = FortIO::Namelist.read(input)
|
|
86
|
-
=> {:group1=>{:var1=>11, :var2=>12},
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
86
|
+
# => {:group1=>{:var1=>11, :var2=>12},
|
|
87
|
+
# :group2=>{:var1=>12, :var2=>22},
|
|
88
|
+
# :group3=>{:var1=>31, :var2=>32}}
|
|
90
89
|
|
|
91
90
|
### read only "group2"
|
|
92
91
|
root = FortIO::Namelist.read(input, group: "group2")
|
|
93
|
-
=> {:group2=>{:var1=>12, :var2=>22}}
|
|
94
|
-
|
|
92
|
+
# => {:group2=>{:var1=>12, :var2=>22}}
|
|
95
93
|
|
|
96
94
|
### read only "group1" and "group3"
|
|
97
95
|
root = FortIO::Namelist.read(input, group: ["group1", "group3"])
|
|
98
|
-
=> {:group1=>{:var1=>11, :var2=>12},
|
|
99
|
-
|
|
96
|
+
# => {:group1=>{:var1=>11, :var2=>12},
|
|
97
|
+
# :group3=>{:var1=>31, :var2=>32}}
|
|
100
98
|
|
|
101
99
|
```
|
|
102
100
|
|
|
103
|
-
### Generating namelist
|
|
101
|
+
### Generating namelist string from Hash object with namelist structure
|
|
104
102
|
|
|
105
|
-
To generate a namelist
|
|
103
|
+
To generate a namelist string from a Hash object with a namelist structure, use the following method.
|
|
106
104
|
|
|
107
105
|
FortIO::Namelist.dump(root, **format_options)
|
|
108
106
|
|
|
109
|
-
The argument `root` is given as a Hash object. The return value is a
|
|
110
|
-
|
|
111
|
-
array_style: 'stream'
|
|
112
|
-
'index'
|
|
113
|
-
|
|
114
|
-
logical_format: 'normal'
|
|
115
|
-
'short'
|
|
116
|
-
|
|
117
|
-
float_format: 'normal'
|
|
118
|
-
'd0'
|
|
119
|
-
|
|
120
|
-
alignment: 'left'
|
|
121
|
-
'right'
|
|
122
|
-
'compact'
|
|
123
|
-
Integer
|
|
124
|
-
|
|
125
|
-
uppercase: false
|
|
126
|
-
true
|
|
127
|
-
|
|
128
|
-
separator: "comma", ","
|
|
129
|
-
"nl", "\n"
|
|
130
|
-
|
|
131
|
-
group_end: "slash", "/"
|
|
132
|
-
"end"
|
|
133
|
-
|
|
134
|
-
indent: ' '*2
|
|
107
|
+
The argument `root` is given as a Hash object. The return value is a namelist string.
|
|
135
108
|
|
|
136
109
|
Example:
|
|
137
110
|
|
|
@@ -159,3 +132,254 @@ This script print a namelist format string to stdout.
|
|
|
159
132
|
var1 = 31,
|
|
160
133
|
var2 = 32
|
|
161
134
|
/
|
|
135
|
+
|
|
136
|
+
### Format options for `FortIO::Namelist.dump`
|
|
137
|
+
|
|
138
|
+
You can finely control the output namelist string with the following keyword arguments (the first one is the default).
|
|
139
|
+
|
|
140
|
+
#### `array_style` : Specifying the notation for array elements
|
|
141
|
+
|
|
142
|
+
* 'stream' : (default)
|
|
143
|
+
* 'index' :
|
|
144
|
+
|
|
145
|
+
Example:
|
|
146
|
+
|
|
147
|
+
```ruby
|
|
148
|
+
root = {group: {var1: [1,2,3], var2: ["a","b","c"]}}
|
|
149
|
+
|
|
150
|
+
puts FortIO::Namelist.dump(root, array_style: 'stream')
|
|
151
|
+
# =>
|
|
152
|
+
# &group
|
|
153
|
+
# var1 = 1, 2, 3,
|
|
154
|
+
# var2 = 'a', 'b', 'c'
|
|
155
|
+
# /
|
|
156
|
+
|
|
157
|
+
puts FortIO::Namelist.dump(root, array_style: 'index')
|
|
158
|
+
# =>
|
|
159
|
+
# &group
|
|
160
|
+
# var1(1) = 1,
|
|
161
|
+
# var1(2) = 2,
|
|
162
|
+
# var1(3) = 3,
|
|
163
|
+
# var2(1) = 'a',
|
|
164
|
+
# var2(2) = 'b',
|
|
165
|
+
# var2(3) = 'c'
|
|
166
|
+
# /
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
#### `logical_format` : Specifying a boolean literal
|
|
170
|
+
|
|
171
|
+
* 'normal' : normal notation like `.true.`, `.false` (default)
|
|
172
|
+
* 'short' : short notation like `t`, `f`
|
|
173
|
+
|
|
174
|
+
```ruby
|
|
175
|
+
root = {group: {var1: true, var2: false}}
|
|
176
|
+
|
|
177
|
+
puts FortIO::Namelist.dump(root, logical_format: 'normal')
|
|
178
|
+
# =>
|
|
179
|
+
# &group
|
|
180
|
+
# var1 = .true.,
|
|
181
|
+
# var2 = .false.
|
|
182
|
+
# /
|
|
183
|
+
|
|
184
|
+
puts FortIO::Namelist.dump(root, logical_format: 'short')
|
|
185
|
+
# =>
|
|
186
|
+
# &group
|
|
187
|
+
# var1 = t,
|
|
188
|
+
# var2 = f
|
|
189
|
+
# /
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
#### `float_format` : Specifying notation for floating point numbers
|
|
193
|
+
|
|
194
|
+
* 'normal' : format with "%g" (default)
|
|
195
|
+
* 'd0' : format with "%g" followed by 'd0'
|
|
196
|
+
* 'exp' : exponential notation
|
|
197
|
+
|
|
198
|
+
```ruby
|
|
199
|
+
root = {group: {var1: 1.0, var2: 12.75, var3: 50.0e-8}}
|
|
200
|
+
|
|
201
|
+
puts FortIO::Namelist.dump(root, float_format: 'normal')
|
|
202
|
+
# =>
|
|
203
|
+
# &group
|
|
204
|
+
# var1 = 1,
|
|
205
|
+
# var2 = 12.75,
|
|
206
|
+
# var3 = 5d-07
|
|
207
|
+
# /
|
|
208
|
+
|
|
209
|
+
puts FortIO::Namelist.dump(root, float_format: 'd0')
|
|
210
|
+
# =>
|
|
211
|
+
# &group
|
|
212
|
+
# var1 = 1d0,
|
|
213
|
+
# var2 = 12.75d0,
|
|
214
|
+
# var3 = 5d-07
|
|
215
|
+
# /
|
|
216
|
+
|
|
217
|
+
puts FortIO::Namelist.dump(root, float_format: 'exp')
|
|
218
|
+
# =>
|
|
219
|
+
# &group
|
|
220
|
+
# var1 = 1d+00,
|
|
221
|
+
# var2 = 1.275d+01,
|
|
222
|
+
# var3 = 5d-07
|
|
223
|
+
# /
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
#### `alignment` : Specifying how variable identifiers are aligned
|
|
227
|
+
|
|
228
|
+
* 'left' : aligned, left-justified, position of '=' can be specified by number eg. 'left:7' (default)
|
|
229
|
+
* 'right' : aligned, right-justified, position of '=' can be specified by number eg. 'right:7'
|
|
230
|
+
* 'none' : not aligned
|
|
231
|
+
* 'stream' : not aligned, stream style, length of each line can be specified by number eg. 'stream:70'
|
|
232
|
+
|
|
233
|
+
```ruby
|
|
234
|
+
root = {group: {var1: 1, variable2: [1,2,3], v3: true}}
|
|
235
|
+
|
|
236
|
+
puts FortIO::Namelist.dump(root, alignment: 'left')
|
|
237
|
+
# =>
|
|
238
|
+
# &group
|
|
239
|
+
# var1 = 1,
|
|
240
|
+
# variable2 = 1, 2, 3,
|
|
241
|
+
# v3 = .true.
|
|
242
|
+
# /
|
|
243
|
+
|
|
244
|
+
puts FortIO::Namelist.dump(root, alignment: 'left:7')
|
|
245
|
+
# =>
|
|
246
|
+
# &group
|
|
247
|
+
# var1 = 1,
|
|
248
|
+
# variable2 = 1, 2, 3,
|
|
249
|
+
# v3 = .true.
|
|
250
|
+
# /
|
|
251
|
+
|
|
252
|
+
puts FortIO::Namelist.dump(root, alignment: 'right')
|
|
253
|
+
# =>
|
|
254
|
+
# &group
|
|
255
|
+
# var1 = 1,
|
|
256
|
+
# variable2 = 1, 2, 3,
|
|
257
|
+
# v3 = .true.
|
|
258
|
+
# /
|
|
259
|
+
|
|
260
|
+
puts FortIO::Namelist.dump(root, alignment: 'right:7')
|
|
261
|
+
# =>
|
|
262
|
+
# &group
|
|
263
|
+
# var1 = 1,
|
|
264
|
+
# variable2 = 1, 2, 3,
|
|
265
|
+
# v3 = .true.
|
|
266
|
+
# /
|
|
267
|
+
|
|
268
|
+
puts FortIO::Namelist.dump(root, alignment: 'none')
|
|
269
|
+
# =>
|
|
270
|
+
# &group
|
|
271
|
+
# var1 = 1,
|
|
272
|
+
# variable2 = 1, 2, 3,
|
|
273
|
+
# v3 = .true.
|
|
274
|
+
# /
|
|
275
|
+
|
|
276
|
+
puts FortIO::Namelist.dump(root, alignment: 'stream')
|
|
277
|
+
# =>
|
|
278
|
+
# &group
|
|
279
|
+
# var1 = 1, variable2 = 1, 2, 3, v3 = .true.,
|
|
280
|
+
# /
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
#### `uppercase` : Specify whether variable names, etc. should be uppercase or lowercase.
|
|
284
|
+
|
|
285
|
+
* false : (default)
|
|
286
|
+
* true :
|
|
287
|
+
|
|
288
|
+
```ruby
|
|
289
|
+
root = {group: {var1: 1, var2: "a"}}
|
|
290
|
+
|
|
291
|
+
puts FortIO::Namelist.dump(root, uppercase: false)
|
|
292
|
+
# =>
|
|
293
|
+
# &group
|
|
294
|
+
# var1 = 1,
|
|
295
|
+
# val2 = 'a'
|
|
296
|
+
# /
|
|
297
|
+
|
|
298
|
+
puts FortIO::Namelist.dump(root, uppercase: true)
|
|
299
|
+
# =>
|
|
300
|
+
# &GROUP
|
|
301
|
+
# VAR1 = 1,
|
|
302
|
+
# VAL2 = 'a'
|
|
303
|
+
# /
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
#### `separator` : Specifying the separator between variable definitions
|
|
307
|
+
|
|
308
|
+
* "comma", "," : comma + NL separeted (default)
|
|
309
|
+
* "nl", "\n" : NL separated
|
|
310
|
+
|
|
311
|
+
```ruby
|
|
312
|
+
root = {group1: {var1: 1, var2: "a", var3: true},
|
|
313
|
+
group2: {var1: 2, var2: "b", var3: false}}
|
|
314
|
+
|
|
315
|
+
puts FortIO::Namelist.dump(root, separator: "comma")
|
|
316
|
+
# =>
|
|
317
|
+
# &group1
|
|
318
|
+
# var1 = 1,
|
|
319
|
+
# var2 = 'a',
|
|
320
|
+
# var3 = .true.
|
|
321
|
+
# /
|
|
322
|
+
# &group2
|
|
323
|
+
# var1 = 2,
|
|
324
|
+
# var2 = 'b',
|
|
325
|
+
# var3 = .false.
|
|
326
|
+
# /
|
|
327
|
+
|
|
328
|
+
puts FortIO::Namelist.dump(root, separator: "nl")
|
|
329
|
+
# =>
|
|
330
|
+
# &group1
|
|
331
|
+
# var1 = 1
|
|
332
|
+
# var2 = 'a'
|
|
333
|
+
# var3 = .true.
|
|
334
|
+
# /
|
|
335
|
+
# &group2
|
|
336
|
+
# var1 = 2
|
|
337
|
+
# var2 = 'b'
|
|
338
|
+
# var3 = .false.
|
|
339
|
+
# /
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
#### `group_end` : Specifying a group terminator
|
|
343
|
+
|
|
344
|
+
* "slash", "/" : end with `/` (default)
|
|
345
|
+
* "end" : end with `&end`
|
|
346
|
+
|
|
347
|
+
```ruby
|
|
348
|
+
root = {group: {var1: true, var2: false}}
|
|
349
|
+
|
|
350
|
+
puts FortIO::Namelist.dump(root, group_end: 'slash')
|
|
351
|
+
# =>
|
|
352
|
+
# &group
|
|
353
|
+
# var1 = .true.,
|
|
354
|
+
# var2 = .false.
|
|
355
|
+
# /
|
|
356
|
+
|
|
357
|
+
puts FortIO::Namelist.dump(root, group_end: 'end')
|
|
358
|
+
# =>
|
|
359
|
+
# &group
|
|
360
|
+
# var1 = .true.,
|
|
361
|
+
# var2 = .false.
|
|
362
|
+
# &end
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
#### `indent` : Specifying the indentation for variable definition
|
|
366
|
+
|
|
367
|
+
* ' '*2 : two spaces (default)
|
|
368
|
+
|
|
369
|
+
```ruby
|
|
370
|
+
root = {group: {var1: true, var2: false}}
|
|
371
|
+
|
|
372
|
+
puts FortIO::Namelist.dump(root, indent: ' '*2)
|
|
373
|
+
# =>
|
|
374
|
+
# &group
|
|
375
|
+
# var1 = .true.,
|
|
376
|
+
# var2 = .false.
|
|
377
|
+
# /
|
|
378
|
+
|
|
379
|
+
puts FortIO::Namelist.dump(root, indent: ' '*4)
|
|
380
|
+
# =>
|
|
381
|
+
# &group
|
|
382
|
+
# var1 = .true.,
|
|
383
|
+
# var2 = .false.
|
|
384
|
+
# /
|
|
385
|
+
```
|
data/fortio-namelist.gemspec
CHANGED
|
@@ -97,6 +97,17 @@ module FortIO::Namelist
|
|
|
97
97
|
# hash -> namelist converter
|
|
98
98
|
#
|
|
99
99
|
|
|
100
|
+
def self.float_to_string (value, d:)
|
|
101
|
+
if value == 0
|
|
102
|
+
return "0.0"
|
|
103
|
+
elsif Math.log10(value).between?(-4,4)
|
|
104
|
+
return "%.16g" % value
|
|
105
|
+
else
|
|
106
|
+
num,exp = ("%.16e" % value).split(/e/)
|
|
107
|
+
return ("%.16g" % num) + d + exp
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
100
111
|
def self.format_element (value,
|
|
101
112
|
logical_format: 'normal',
|
|
102
113
|
float_format: 'normal',
|
|
@@ -112,12 +123,13 @@ module FortIO::Namelist
|
|
|
112
123
|
d = uppercase ? "D" : "d"
|
|
113
124
|
case float_format
|
|
114
125
|
when 'normal'
|
|
115
|
-
|
|
126
|
+
float_to_string(value, d: d)
|
|
116
127
|
when 'd0'
|
|
117
|
-
value = (
|
|
118
|
-
return ( value =~ /
|
|
128
|
+
value = float_to_string(value, d: d)
|
|
129
|
+
return ( value =~ /#{d}/ ) ? value : value + d + "0"
|
|
119
130
|
when 'exp'
|
|
120
|
-
|
|
131
|
+
num,exp = ("%.16e" % value).split(/e/)
|
|
132
|
+
return ("%.16g" % num) + d + exp
|
|
121
133
|
else
|
|
122
134
|
raise "invalid float_format"
|
|
123
135
|
end
|
|
@@ -191,24 +203,47 @@ module FortIO::Namelist
|
|
|
191
203
|
raise "invalid keyword argument `separator` (should be 'comma', ',', 'nl', '\n')"
|
|
192
204
|
end
|
|
193
205
|
case alignment
|
|
206
|
+
when /\Astream(:(\d+))?/
|
|
207
|
+
maxlen = $2 ? $2.to_i : 79 - indent.size
|
|
208
|
+
elements = list.map { |ident, value|
|
|
209
|
+
format("%s = %s", ident, value)
|
|
210
|
+
}
|
|
211
|
+
body = ""
|
|
212
|
+
line = []
|
|
213
|
+
len = indent.size
|
|
214
|
+
elements.each do |e|
|
|
215
|
+
if len + e.length >= maxlen
|
|
216
|
+
body += indent + line.join(", ") + nl
|
|
217
|
+
line = []
|
|
218
|
+
len = indent.size
|
|
219
|
+
end
|
|
220
|
+
line << e
|
|
221
|
+
len += e.length + 2
|
|
222
|
+
end
|
|
223
|
+
body += indent + line.join(", ") + nl unless line.empty?
|
|
224
|
+
body = body.chomp
|
|
194
225
|
when "none"
|
|
195
226
|
body = list.map { |ident, value|
|
|
196
227
|
format("%s%s = %s", indent, ident, value)
|
|
197
228
|
}.join(nl)
|
|
198
|
-
when
|
|
199
|
-
|
|
229
|
+
when /\Aleft(:(\d+))?/
|
|
230
|
+
if $2
|
|
231
|
+
ident_maxlen = $2.to_i - indent.size
|
|
232
|
+
else
|
|
233
|
+
ident_maxlen = list.map{|ident,value| ident.length}.max
|
|
234
|
+
end
|
|
200
235
|
body = list.map { |ident, value|
|
|
201
236
|
format("%s%-#{ident_maxlen}s = %s", indent, ident, value)
|
|
202
237
|
}.join(nl)
|
|
203
|
-
when
|
|
204
|
-
|
|
238
|
+
when /\Aright(:(\d+))?/
|
|
239
|
+
if $2
|
|
240
|
+
ident_maxlen = $2.to_i - indent.size
|
|
241
|
+
else
|
|
242
|
+
ident_maxlen = list.map{|ident,value| ident.length}.max
|
|
243
|
+
end
|
|
205
244
|
body = list.map { |ident, value|
|
|
206
245
|
format("%s%#{ident_maxlen}s = %s", indent, ident, value)
|
|
207
246
|
}.join(nl)
|
|
208
|
-
when Integer
|
|
209
|
-
body = list.map { |ident, value|
|
|
210
|
-
format("%s%-#{alignment-2}s = %s", indent, ident, value)
|
|
211
|
-
}.join(nl)
|
|
212
247
|
else
|
|
213
248
|
raise "invalid keyword argument `alignment` (should be 'normal' 'left' 'right' 'stream')"
|
|
214
249
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
2
|
# DO NOT MODIFY!!!!
|
|
3
|
-
# This file is automatically generated by Racc 1.
|
|
3
|
+
# This file is automatically generated by Racc 1.4.16
|
|
4
4
|
# from Racc grammar file "".
|
|
5
5
|
#
|
|
6
6
|
|
|
@@ -243,36 +243,36 @@ module_eval(<<'...end fortran_namelist.y/module_eval...', 'fortran_namelist.y',
|
|
|
243
243
|
##### State transition tables begin ###
|
|
244
244
|
|
|
245
245
|
racc_action_table = [
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
43, 46, 4, 5, 21,
|
|
252
|
-
|
|
253
|
-
7,
|
|
254
|
-
24, 68, 70, 51, 74, 75
|
|
246
|
+
65, 51, 63, 14, 48, 4, 5, 21, 47, 62,
|
|
247
|
+
18, 39, 15, 41, 66, 42, 43, 46, 49, 48,
|
|
248
|
+
34, 13, 13, 47, 26, 30, 39, 24, 41, 47,
|
|
249
|
+
42, 43, 46, 49, 41, 51, 42, 43, 46, 47,
|
|
250
|
+
4, 5, 56, 55, 41, 47, 42, 43, 46, 13,
|
|
251
|
+
59, 13, 42, 43, 46, 4, 5, 21, 59, 13,
|
|
252
|
+
18, 29, 46, 30, 59, 24, 23, 24, 46, 33,
|
|
253
|
+
7, 57, 4, 5, 10, 13, 10, 13, 58, 61,
|
|
254
|
+
24, 24, 68, 70, 51, 74, 75 ]
|
|
255
255
|
|
|
256
256
|
racc_action_check = [
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
58, 58,
|
|
263
|
-
|
|
264
|
-
1,
|
|
265
|
-
53, 60, 62, 63, 70, 72
|
|
257
|
+
57, 74, 51, 6, 69, 25, 25, 25, 69, 51,
|
|
258
|
+
25, 69, 7, 69, 57, 69, 69, 69, 69, 28,
|
|
259
|
+
28, 61, 10, 28, 19, 61, 28, 22, 28, 55,
|
|
260
|
+
28, 28, 28, 28, 55, 29, 55, 55, 55, 36,
|
|
261
|
+
0, 0, 36, 36, 36, 58, 36, 36, 36, 30,
|
|
262
|
+
58, 33, 58, 58, 58, 9, 9, 9, 47, 21,
|
|
263
|
+
9, 21, 47, 21, 68, 27, 11, 11, 68, 27,
|
|
264
|
+
1, 37, 1, 1, 16, 16, 3, 3, 41, 50,
|
|
265
|
+
52, 53, 60, 62, 63, 70, 72 ]
|
|
266
266
|
|
|
267
267
|
racc_action_pointer = [
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
nil,
|
|
271
|
-
|
|
272
|
-
nil,
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
268
|
+
38, 70, nil, 71, nil, nil, -1, 12, nil, 53,
|
|
269
|
+
16, 61, nil, nil, nil, nil, 69, nil, nil, 20,
|
|
270
|
+
nil, 53, 21, nil, nil, 3, nil, 59, 15, 22,
|
|
271
|
+
43, nil, nil, 45, nil, nil, 31, 59, nil, nil,
|
|
272
|
+
nil, 64, nil, nil, nil, nil, nil, 45, nil, nil,
|
|
273
|
+
70, -10, 74, 75, nil, 21, nil, -4, 37, nil,
|
|
274
|
+
70, 15, 70, 71, nil, nil, nil, nil, 51, 0,
|
|
275
|
+
73, nil, 77, nil, -12, nil, nil ]
|
|
276
276
|
|
|
277
277
|
racc_action_default = [
|
|
278
278
|
-51, -51, -2, -15, -5, -6, -51, -51, -1, -51,
|
|
@@ -285,24 +285,24 @@ racc_action_default = [
|
|
|
285
285
|
-48, -49, -51, -22, -51, -42, -50 ]
|
|
286
286
|
|
|
287
287
|
racc_goto_table = [
|
|
288
|
-
22, 50, 35, 60, 28,
|
|
289
|
-
|
|
290
|
-
52,
|
|
288
|
+
22, 50, 35, 60, 28, 20, 54, 2, 8, 9,
|
|
289
|
+
17, 27, 19, 1, 16, 67, nil, nil, nil, nil,
|
|
290
|
+
52, 32, 25, 53, 72, 64, 31, nil, 19, nil,
|
|
291
291
|
nil, nil, nil, nil, nil, 71, nil, nil, nil, nil,
|
|
292
292
|
nil, nil, nil, 73, 69, nil, 76, nil, nil, nil,
|
|
293
293
|
nil, 27 ]
|
|
294
294
|
|
|
295
295
|
racc_goto_check = [
|
|
296
|
-
8, 13, 12, 18, 11,
|
|
297
|
-
|
|
298
|
-
8,
|
|
296
|
+
8, 13, 12, 18, 11, 10, 16, 2, 2, 4,
|
|
297
|
+
6, 8, 7, 1, 5, 17, nil, nil, nil, nil,
|
|
298
|
+
8, 10, 4, 8, 18, 16, 6, nil, 7, nil,
|
|
299
299
|
nil, nil, nil, nil, nil, 13, nil, nil, nil, nil,
|
|
300
300
|
nil, nil, nil, 12, 11, nil, 13, nil, nil, nil,
|
|
301
301
|
nil, 8 ]
|
|
302
302
|
|
|
303
303
|
racc_goto_pointer = [
|
|
304
|
-
nil, 13, 7, nil, 6, 5,
|
|
305
|
-
|
|
304
|
+
nil, 13, 7, nil, 6, 5, 1, 3, -10, nil,
|
|
305
|
+
-4, -17, -26, -28, nil, nil, -30, -43, -44, nil ]
|
|
306
306
|
|
|
307
307
|
racc_goto_default = [
|
|
308
308
|
nil, nil, nil, 3, nil, nil, nil, 6, 11, 12,
|
data/spec/dump_spec.rb
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require "fortio-namelist"
|
|
2
|
+
require "rspec-power_assert"
|
|
3
|
+
|
|
4
|
+
describe "FortIO::Namelist" do
|
|
5
|
+
|
|
6
|
+
example "dumping float" do
|
|
7
|
+
root = {example: {v1: 1.234567890123456, v2: 0.123456789012345, v3: 1.234567890123456e10}}
|
|
8
|
+
output = FortIO::Namelist.dump(root)
|
|
9
|
+
|
|
10
|
+
answer = <<HERE
|
|
11
|
+
&example
|
|
12
|
+
v1 = 1.234567890123456,
|
|
13
|
+
v2 = 0.123456789012345,
|
|
14
|
+
v3 = 1.234567890123456d+10
|
|
15
|
+
/
|
|
16
|
+
HERE
|
|
17
|
+
|
|
18
|
+
is_asserted_by { output == answer }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
example "dumping float 'd0'" do
|
|
22
|
+
root = {example: {v1: 1.234567890123456, v2: 0.123456789012345, v3: 1.234567890123456e10}}
|
|
23
|
+
output = FortIO::Namelist.dump(root, float_format: 'd0')
|
|
24
|
+
|
|
25
|
+
answer = <<HERE
|
|
26
|
+
&example
|
|
27
|
+
v1 = 1.234567890123456d0,
|
|
28
|
+
v2 = 0.123456789012345d0,
|
|
29
|
+
v3 = 1.234567890123456d+10
|
|
30
|
+
/
|
|
31
|
+
HERE
|
|
32
|
+
|
|
33
|
+
is_asserted_by { output == answer }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
example "dumping float 'exp'" do
|
|
37
|
+
root = {example: {v1: 1.234567890123456, v2: 0.123456789012345, v3: 1.234567890123456e10}}
|
|
38
|
+
output = FortIO::Namelist.dump(root, float_format: 'exp')
|
|
39
|
+
|
|
40
|
+
answer = <<HERE
|
|
41
|
+
&example
|
|
42
|
+
v1 = 1.234567890123456d+00,
|
|
43
|
+
v2 = 1.23456789012345d-01,
|
|
44
|
+
v3 = 1.234567890123456d+10
|
|
45
|
+
/
|
|
46
|
+
HERE
|
|
47
|
+
|
|
48
|
+
is_asserted_by { output == answer }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fortio-namelist
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hiroki Motoyoshi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-04-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: racc
|
|
@@ -39,6 +39,7 @@ files:
|
|
|
39
39
|
- lib/fortio-namelist/fortran_namelist.tab.rb
|
|
40
40
|
- lib/fortio-namelist/fortran_namelist.y
|
|
41
41
|
- spec/array_spec.rb
|
|
42
|
+
- spec/dump_spec.rb
|
|
42
43
|
- spec/empty_spec.rb
|
|
43
44
|
- spec/identifier_spec.rb
|
|
44
45
|
- spec/scalar_spec.rb
|
|
@@ -62,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
62
63
|
- !ruby/object:Gem::Version
|
|
63
64
|
version: '0'
|
|
64
65
|
requirements: []
|
|
65
|
-
rubygems_version: 3.
|
|
66
|
+
rubygems_version: 3.1.2
|
|
66
67
|
signing_key:
|
|
67
68
|
specification_version: 4
|
|
68
69
|
summary: A library for reading/writing fortran namelist file
|