mirror of
https://github.com/typst/typst
synced 2025-05-19 11:35:27 +08:00
Translate TOML datetime properly
This commit is contained in:
parent
7ece53ae0c
commit
3bedf8d0d1
@ -1,4 +1,5 @@
|
|||||||
use typst::diag::{format_xml_like_error, FileError};
|
use typst::diag::{format_xml_like_error, FileError};
|
||||||
|
use typst::eval::Datetime;
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
@ -268,8 +269,24 @@ fn convert_toml(value: toml::Value) -> Value {
|
|||||||
.map(|(key, value)| (key.into(), convert_toml(value)))
|
.map(|(key, value)| (key.into(), convert_toml(value)))
|
||||||
.collect::<Dict>()
|
.collect::<Dict>()
|
||||||
.into_value(),
|
.into_value(),
|
||||||
// TODO: Make it use native date/time object(s) once it is implemented.
|
toml::Value::Datetime(v) => match (v.date, v.time) {
|
||||||
toml::Value::Datetime(v) => v.to_string().into_value(),
|
(None, None) => Value::None,
|
||||||
|
(Some(date), None) => {
|
||||||
|
Datetime::from_ymd(date.year as i32, date.month, date.day).into_value()
|
||||||
|
}
|
||||||
|
(None, Some(time)) => {
|
||||||
|
Datetime::from_hms(time.hour, time.minute, time.second).into_value()
|
||||||
|
}
|
||||||
|
(Some(date), Some(time)) => Datetime::from_ymd_hms(
|
||||||
|
date.year as i32,
|
||||||
|
date.month,
|
||||||
|
date.day,
|
||||||
|
time.hour,
|
||||||
|
time.minute,
|
||||||
|
time.second,
|
||||||
|
)
|
||||||
|
.into_value(),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,9 +16,9 @@ pub enum Datetime {
|
|||||||
/// Representation as a date.
|
/// Representation as a date.
|
||||||
Date(time::Date),
|
Date(time::Date),
|
||||||
/// Representation as a time.
|
/// Representation as a time.
|
||||||
Datetime(time::PrimitiveDateTime),
|
|
||||||
/// Representation as a combination of date and time.
|
|
||||||
Time(time::Time),
|
Time(time::Time),
|
||||||
|
/// Representation as a combination of date and time.
|
||||||
|
Datetime(time::PrimitiveDateTime),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Datetime {
|
impl Datetime {
|
||||||
|
@ -48,11 +48,18 @@
|
|||||||
#test(data.integer, 42)
|
#test(data.integer, 42)
|
||||||
#test(data.float, 3.14)
|
#test(data.float, 3.14)
|
||||||
#test(data.boolean, true)
|
#test(data.boolean, true)
|
||||||
#test(data.date_time, "2023-02-01T15:38:57Z")
|
|
||||||
#test(data.array, (1, "string", 3.0, false))
|
#test(data.array, (1, "string", 3.0, false))
|
||||||
#test(data.inline_table, ("first": "amazing", "second": "greater") )
|
#test(data.inline_table, ("first": "amazing", "second": "greater") )
|
||||||
#test(data.table.element, 5)
|
#test(data.table.element, 5)
|
||||||
#test(data.table.others, (false, "indeed", 7))
|
#test(data.table.others, (false, "indeed", 7))
|
||||||
|
#test(data.date_time, datetime(
|
||||||
|
year: 2023,
|
||||||
|
month: 2,
|
||||||
|
day: 1,
|
||||||
|
hour: 15,
|
||||||
|
minute: 38,
|
||||||
|
second: 57,
|
||||||
|
))
|
||||||
|
|
||||||
---
|
---
|
||||||
// Error: 7-18 failed to parse toml file: expected `.`, `=`, index 15-15
|
// Error: 7-18 failed to parse toml file: expected `.`, `=`, index 15-15
|
||||||
|
Loading…
x
Reference in New Issue
Block a user