commit - 83c53863507492a17cf4080a743b1950959bb46d
commit + d98b5711eb943d09e6ed701d1d6d006bbf2d0205
blob - 058f177ca337d42ca5a27ff0374f9d56ca096af7
blob + 425fb146da64d53bc2af9e49b54e2a757fcf80b4
--- README.md
+++ README.md
- [bc](https://man.openbsd.org/bc), an arbitrary precision calculator language (```bc.lark```)
- [The GEDCOM Standard](http://user.it.uu.se/~andersa/gedcom/) (```gedcom.lark```)
- [eqn](https://man.openbsd.org/eqn), language reference for mandoc (```eqn.lark```)
+- [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html), Date and time format ```iso-8601.lark```)
- [mdoc](https://man.openbsd.org/mdoc.7), semantic markup language for formatting manual pages (```mdoc.lark```)
- MIME [Media Types](https://www.iana.org/assignments/media-types/media-types.xhtml) (```mime.lark```)
- Lua 5.1 language grammar specification (```lua.lark```)
blob - /dev/null
blob + 635836f9d075a5b283771731b159750d7064acba (mode 644)
--- /dev/null
+++ lark_grammars/grammars/iso-8601.lark
+DIGIT : "0".."9"
+NOZERO : "1".."9"
+NUMBER : NOZERO?DIGIT+
+
+start : datetime
+
+year : DIGIT DIGIT DIGIT DIGIT
+month : "0" "1".."9"
+ | "1" "1".."2"
+day : "0" DIGIT
+ | "1" DIGIT
+ | "2" DIGIT
+ | "3" "0".."1"
+
+// Dates
+calendar_date : year "-"? month "-"? day
+ | year "-" month
+ | "--" month "-"? day
+
+week_number : "0".."4" DIGIT
+ | "5" "0".."3"
+prefixed_week_number : "W" week_number
+weekday_number : "1".."7"
+week_date : year "-"? prefixed_week_number
+ | year "-"? prefixed_week_number "-"? weekday_number
+
+day_number : "1".."2" DIGIT DIGIT
+ | "3" "0".."5" DIGIT
+ | "3" "6" "0".."6" // leap day
+ordinal_date : year "-"? day_number
+
+date : ordinal_date
+ | calendar_date
+ | week_date
+
+// Time primitives
+hour : "0".."1" DIGIT
+ | "2" "0".."4"
+minute : "0".."5" DIGIT
+second : "0".."5" DIGIT
+ | "60" // leap second
+fractional : "." DIGIT+
+
+// Time
+time : "T"? hour ":"? minute ":"? second fractional?
+prefixed_time: "T" hour ":"? minute ":"? second fractional?
+time_zone : "Z"
+ | ("+"|"-") hour (":"? minute)
+
+// Combined
+datetime : date prefixed_time time_zone?
blob - 5278687883a81236eada5f31c335547d046038ff
blob + 010b05a5911519356806008131bbcc8ae4284f91
--- lark_grammars/grammars.py
+++ lark_grammars/grammars.py
grammar_files = {'bc': _build_path('bc.lark'),
'gedcom': _build_path('gedcom.lark'),
'eqn': _build_path('eqn.lark'),
+ 'iso-8601': _build_path('iso-8601.lark'),
'lua': _build_path('lua.lark'),
'mdoc': _build_path('mdoc.lark'),
'mime': _build_path('mime.lark'),