@@ -327,17 +327,27 @@ bitflags! {
327327 ///
328328 /// let m = Modifier::BOLD | Modifier::ITALIC;
329329 /// ```
330− #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
330+ #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize), serde(rename_all = "kebab-case"))]
331331 pub struct Modifier: u16 {
332− const BOLD = 0b0000_0000_0001;
333− const DIM = 0b0000_0000_0010;
334− const ITALIC = 0b0000_0000_0100;
335− const UNDERLINED = 0b0000_0000_1000;
336− const SLOW_BLINK = 0b0000_0001_0000;
337− const RAPID_BLINK = 0b0000_0010_0000;
338− const REVERSED = 0b0000_0100_0000;
339− const HIDDEN = 0b0000_1000_0000;
340− const CROSSED_OUT = 0b0001_0000_0000;
332+ const BOLD = 0b0000_0000_0000_0001;
333+ const DIM = 0b0000_0000_0000_0010;
334+ const ITALIC = 0b0000_0000_0000_0100;
335+ const UNDERLINED = 0b0000_0000_0000_1000;
336+ const SLOW_BLINK = 0b0000_0000_0001_0000;
337+ const RAPID_BLINK = 0b0000_0000_0010_0000;
338+ const REVERSED = 0b0000_0000_0100_0000;
339+ const HIDDEN = 0b0000_0000_1000_0000;
340+ const CROSSED_OUT = 0b0000_0001_0000_0000;
341+ const UNDERCURLED = 0b0000_0010_0000_0000;
342+ const UNDERDOTTED = 0b0000_0100_0000_0000;
343+ const UNDERDASHED = 0b0000_1000_0000_0000;
344+ const DOUBLE_UNDERLINED = 0b0001_0000_0000_0000;
345+
346+ const ANY_UNDERLINE = Self::UNDERLINED.bits
347+ | Self::UNDERCURLED.bits
348+ | Self::UNDERDOTTED.bits
349+ | Self::UNDERDASHED.bits
350+ | Self::DOUBLE_UNDERLINED.bits;
341351 }
342352}
343353
@@ -355,6 +365,10 @@ impl FromStr for Modifier {
355365 "reversed" => Ok(Self::REVERSED),
356366 "hidden" => Ok(Self::HIDDEN),
357367 "crossed_out" => Ok(Self::CROSSED_OUT),
368+ "undercurled" => Ok(Self::UNDERCURLED),
369+ "underdotted" => Ok(Self::UNDERDOTTED),
370+ "underdashed" => Ok(Self::UNDERDASHED),
371+ "double_underlined" => Ok(Self::DOUBLE_UNDERLINED),
358372 _ => Err("Invalid modifier"),
359373 }
360374 }