summaryrefslogtreecommitdiffstats
path: root/vendor/anes/src/sequences/attribute.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/anes/src/sequences/attribute.rs')
-rw-r--r--vendor/anes/src/sequences/attribute.rs133
1 files changed, 133 insertions, 0 deletions
diff --git a/vendor/anes/src/sequences/attribute.rs b/vendor/anes/src/sequences/attribute.rs
new file mode 100644
index 000000000..30961ff4b
--- /dev/null
+++ b/vendor/anes/src/sequences/attribute.rs
@@ -0,0 +1,133 @@
+use std::fmt;
+
+sequence!(
+ /// Resets all attributes.
+ ///
+ /// This sequence resets all attributes previously set by the:
+ ///
+ /// * [`SetAttribute`](struct.SetAttribute.html)
+ /// * [`SetForegroundColor`](struct.SetBackgroundColor.html)
+ /// * [`SetBackgroundColor`](struct.SetForegroundColor.html)
+ ///
+ /// # Examples
+ ///
+ /// ```no_run
+ /// use std::io::{stdout, Write};
+ /// use anes::ResetAttributes;
+ ///
+ /// let mut stdout = stdout();
+ /// write!(stdout, "{}", ResetAttributes);
+ /// ```
+ struct ResetAttributes => sgr!("0")
+);
+
+/// A display attribute.
+///
+/// This is **NOT** a full ANSI sequence. `Attribute` must be used along with
+/// the [`SetAttribute`](struct.SetAttribute.html).
+///
+/// # Examples
+///
+/// ```no_run
+/// use std::io::{stdout, Write};
+/// use anes::{Attribute, SetAttribute};
+///
+/// let mut stdout = stdout();
+/// write!(stdout, "{}Bold text", SetAttribute(Attribute::Bold));
+/// ```
+#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
+pub enum Attribute {
+ /// Bold (increased) intensity.
+ Bold = 1,
+ /// Faint (decreased) intensity.
+ Faint = 2,
+ /// Normal intensity (turns off `Bold` and/or `Faint`).
+ Normal = 22,
+
+ /// Italic.
+ Italic = 3,
+ /// Turns off `Italic`.
+ ItalicOff = 23,
+
+ /// Underlined text.
+ Underline = 4,
+ /// Turns off `Underline`.
+ UnderlineOff = 24,
+
+ /// Blinking text.
+ Blink = 5,
+ /// Turns off blinking text (`Blink`).
+ BlinkOff = 25,
+
+ /// Reverse foreground & background colors.
+ Reverse = 7,
+ /// Turns off `Reverse`.
+ ReverseOff = 27,
+
+ /// Concealed (hidden).
+ Conceal = 8,
+ /// Turns off `Conceal`.
+ ConcealOff = 28,
+
+ /// Crossed.
+ Crossed = 9,
+ /// Turns off `Crossed`.
+ CrossedOff = 29,
+}
+
+impl fmt::Display for Attribute {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "{}", *self as i32)
+ }
+}
+
+sequence!(
+ /// Sets the display attribute.
+ ///
+ /// See the [`Attribute`](enum.Attribute.html) enum for a list of attributes you can (un)set.
+ ///
+ /// The [`ResetAttributes`](struct.ResetAttributes.html) sequence can be used to turn off all
+ /// attributes.
+ ///
+ /// # Examples
+ ///
+ /// ```no_run
+ /// use std::io::{stdout, Write};
+ /// use anes::{Attribute, SetAttribute};
+ ///
+ /// let mut stdout = stdout();
+ /// write!(stdout, "{}Blinking text", SetAttribute(Attribute::Blink));
+ /// ```
+ struct SetAttribute(Attribute) =>
+ |this, f| write!(f, sgr!("{}"), this.0)
+);
+
+#[cfg(test)]
+test_sequences!(
+ set_attribute(
+ SetAttribute(Attribute::Bold) => "\x1B[1m",
+ SetAttribute(Attribute::Faint) => "\x1B[2m",
+ SetAttribute(Attribute::Normal) => "\x1B[22m",
+
+ SetAttribute(Attribute::Italic) => "\x1B[3m",
+ SetAttribute(Attribute::ItalicOff) => "\x1B[23m",
+
+ SetAttribute(Attribute::Underline) => "\x1B[4m",
+ SetAttribute(Attribute::UnderlineOff) => "\x1B[24m",
+
+ SetAttribute(Attribute::Blink) => "\x1B[5m",
+ SetAttribute(Attribute::BlinkOff) => "\x1B[25m",
+
+ SetAttribute(Attribute::Reverse) => "\x1B[7m",
+ SetAttribute(Attribute::ReverseOff) => "\x1B[27m",
+
+ SetAttribute(Attribute::Conceal) => "\x1B[8m",
+ SetAttribute(Attribute::ConcealOff) => "\x1B[28m",
+
+ SetAttribute(Attribute::Crossed) => "\x1B[9m",
+ SetAttribute(Attribute::CrossedOff) => "\x1B[29m",
+ ),
+ reset_attributes(
+ ResetAttributes => "\x1B[0m",
+ )
+);