mc-legacy-formatting 0.2.0

A non-allocating parser for Minecraft's legacy formatting system
Documentation

mc-legacy-formatting

Docs.rs docs Crates.io version Crates.io downloads CI

A parser for Minecraft's legacy formatting system, created with careful attention to the quirks of the vanilla client's implementation.

Features

  • Iterator-based, non-allocating parser
  • Supports #![no_std] usage (with default-features set to false)
  • Implements the entire spec as well as vanilla client quirks (such as handling of whitespace with the STRIKETHROUGH style)
  • Helpers for pretty-printing the parsed Spans to the terminal
  • Support for parsing any start character for the formatting codes (vanilla uses § while many community tools use &)

Examples

Using SpanIter:

use mc_legacy_formatting::{SpanExt, Span, Color, Styles};

let s = "§4This will be dark red §oand italic";
let mut span_iter = s.span_iter();

assert_eq!(span_iter.next().unwrap(), Span::new_styled("This will be dark red ", Color::DarkRed, Styles::empty()));
assert_eq!(span_iter.next().unwrap(), Span::new_styled("and italic", Color::DarkRed, Styles::ITALIC));
assert!(span_iter.next().is_none());

With a custom start character:

use mc_legacy_formatting::{SpanExt, Span, Color, Styles};

let s = "&6It's a lot easier to type &b& &6than &b§";
let mut span_iter = s.span_iter().with_start_char('&');

assert_eq!(span_iter.next().unwrap(), Span::new_styled("It's a lot easier to type ", Color::Gold, Styles::empty()));
assert_eq!(span_iter.next().unwrap(), Span::new_styled("& ", Color::Aqua, Styles::empty()));
assert_eq!(span_iter.next().unwrap(), Span::new_styled("than ", Color::Gold, Styles::empty()));
assert_eq!(span_iter.next().unwrap(), Span::new_styled("§", Color::Aqua, Styles::empty()));
assert!(span_iter.next().is_none());

License