Skip to content

Commit 0e24434

Browse files
committed
Add time string parser
1 parent 5deac91 commit 0e24434

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

Changelog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
# v0.0.6.alpha
4+
* Add time string parser.
5+
* Fix wasm examples.
6+
* Remove bundled wasm_exec.js.
7+
* Fix README.
8+
39
# v0.0.5
410
* Fix lint warning.
511
* Edit lint settings.

extra/classes/classes.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ const (
99
NumericStr = ":extra:NumericStr"
1010
DateStr = ":extra:DateStr"
1111
DateTimeStr = ":extra:DateTimeStr"
12+
TimeStr = ":extra:TimeStr"
1213
)

extra/extra.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,3 +268,51 @@ func DateTimeStr() ParserFn {
268268
ChangeClassName(clsz.DateTimeStr),
269269
)
270270
}
271+
272+
// Parse the ISO 8601 time string.
273+
// (hh:mm , ... , hh:mm:ss.fffffffff)
274+
func TimeStr() ParserFn {
275+
return Trans(
276+
FlatGroup(
277+
CharRange(RuneRange{Start: '0', End: '2'}),
278+
CharRange(RuneRange{Start: '0', End: '9'}),
279+
Seq(":"),
280+
CharRange(RuneRange{Start: '0', End: '5'}),
281+
CharRange(RuneRange{Start: '0', End: '9'}),
282+
First(
283+
FlatGroup(
284+
Seq(":"),
285+
CharRange(RuneRange{Start: '0', End: '6'}),
286+
CharRange(RuneRange{Start: '0', End: '9'}),
287+
First(
288+
FlatGroup(
289+
Seq("."),
290+
Trans(
291+
Repeat(Times{Min: 1, Max: 9}, // 3: milli, 6: micro, 9: nano
292+
CharRange(RuneRange{Start: '0', End: '9'}),
293+
),
294+
Concat,
295+
func(ctx ParserContext, asts AstSlice) (AstSlice, error) {
296+
return AstSlice{{
297+
Type: AstType_String,
298+
Value: (asts[len(asts)-1].Value.(string) + "000000000")[0:9],
299+
}}, nil
300+
},
301+
),
302+
),
303+
Zero(Ast{
304+
Type: AstType_String,
305+
Value: ".000000000",
306+
}),
307+
),
308+
),
309+
Zero(Ast{
310+
Type: AstType_String,
311+
Value: ":00.000000000",
312+
}),
313+
),
314+
),
315+
Concat,
316+
ChangeClassName(clsz.TimeStr),
317+
)
318+
}

0 commit comments

Comments
 (0)