penmanship 0.1.0

A Unicode character lookup library for converting text patterns to Unicode characters
Documentation
//! Miscellaneous symbol mappings.

use phf::phf_map;

/// Miscellaneous symbol mappings.
///
/// Includes legal symbols, general symbols, card suits, music notation, and zodiac symbols.
pub static SYMBOLS: phf::Map<&'static str, (&'static str, &'static str)> = phf_map! {
    // Legal & Copyright
    "(c)" => ("\u{00A9}", "copyright sign"),                 // ©
    "(C)" => ("\u{00A9}", "copyright sign"),                 // ©
    "copy" => ("\u{00A9}", "copyright sign"),                // ©
    "(r)" => ("\u{00AE}", "registered sign"),                // ®
    "(R)" => ("\u{00AE}", "registered sign"),                // ®
    "reg" => ("\u{00AE}", "registered sign"),                // ®
    "(tm)" => ("\u{2122}", "trade mark sign"),               //    "(TM)" => ("\u{2122}", "trade mark sign"),               //    "(t)" => ("\u{2122}", "trade mark sign"),                //    "(T)" => ("\u{2122}", "trade mark sign"),                //    "tm" => ("\u{2122}", "trade mark sign"),                 //    "(p)" => ("\u{2117}", "sound recording copyright"),      //    "(P)" => ("\u{2117}", "sound recording copyright"),      //
    // General symbols
    "section" => ("\u{00A7}", "section sign"),               // §
    "sect" => ("\u{00A7}", "section sign"),                  // §
    "para" => ("\u{00B6}", "pilcrow sign"),                  //    "paragraph" => ("\u{00B6}", "pilcrow sign"),             //    "bullet" => ("\u{2022}", "bullet"),                      //    "middot" => ("\u{00B7}", "middle dot"),                  // ·
    "dag" => ("\u{2020}", "dagger"),                         //    "dagger" => ("\u{2020}", "dagger"),                      //    "ddag" => ("\u{2021}", "double dagger"),                 //    "ddagger" => ("\u{2021}", "double dagger"),              //    "deg" => ("\u{00B0}", "degree sign"),                    // °
    "degree" => ("\u{00B0}", "degree sign"),                 // °
    "prime" => ("\u{2032}", "prime"),                        //    "dprime" => ("\u{2033}", "double prime"),                //    "Prime" => ("\u{2033}", "double prime"),                 //    "tprime" => ("\u{2034}", "triple prime"),                //    "check" => ("\u{2713}", "check mark"),                   //    "checkmark" => ("\u{2713}", "check mark"),               //    "cross" => ("\u{2717}", "ballot x"),                     //    "star" => ("\u{2605}", "black star"),                    //    "ostar" => ("\u{2606}", "white star"),                   //
    // Whitespace
    "nbsp" => ("\u{00A0}", "no-break space"),                // Whitespace
    "thinsp" => ("\u{2009}", "thin space"),                  //     .
    "tsp"  => ("\u{2009}", "thin space"),                    //     .
    "emsp" => ("\u{2003}", "em space"),                      //     .
    "ensp" => ("\u{2002}", "en space"),                      //     .
    "zwsp" => ("\u{200B}", "zero width space"),              //     .
    "zwnj" => ("\u{200C}", "zero width non-joiner"),         //     .

    // Card suits
    "spade" => ("\u{2660}", "black spade suit"),             //    "heart" => ("\u{2665}", "black heart suit"),             //    "diamond" => ("\u{2666}", "black diamond suit"),         //    "club" => ("\u{2663}", "black club suit"),               //
    // Music notation
    "sharp" => ("\u{266F}", "music sharp sign"),             //    "flat" => ("\u{266D}", "music flat sign"),               //    "natural" => ("\u{266E}", "music natural sign"),         //    "note" => ("\u{266A}", "eighth note"),                   //    "notes" => ("\u{266B}", "beamed eighth notes"),          //
    // Zodiac
    "aries" => ("\u{2648}", "aries"),                        //    "taurus" => ("\u{2649}", "taurus"),                      //    "gemini" => ("\u{264A}", "gemini"),                      //    "cancer" => ("\u{264B}", "cancer"),                      //    "leo" => ("\u{264C}", "leo"),                            //    "virgo" => ("\u{264D}", "virgo"),                        //    "libra" => ("\u{264E}", "libra"),                        //    "scorpio" => ("\u{264F}", "scorpio"),                    //    "sagittarius" => ("\u{2650}", "sagittarius"),            //    "capricorn" => ("\u{2651}", "capricorn"),                //    "aquarius" => ("\u{2652}", "aquarius"),                  //    "pisces" => ("\u{2653}", "pisces"),                      //};

#[cfg(test)]
mod tests {
    use super::*;

    /// Test legal symbols.
    #[test]
    fn test_legal_symbols() {
        assert_eq!(SYMBOLS.get("(c)"), Some(&("\u{00A9}", "copyright sign")));
        assert_eq!(SYMBOLS.get("(r)"), Some(&("\u{00AE}", "registered sign")));
        assert_eq!(SYMBOLS.get("(tm)"), Some(&("\u{2122}", "trade mark sign")));
    }

    /// Test general symbols.
    #[test]
    fn test_general_symbols() {
        assert_eq!(SYMBOLS.get("bullet"), Some(&("\u{2022}", "bullet")));
        assert_eq!(SYMBOLS.get("degree"), Some(&("\u{00B0}", "degree sign")));
        assert_eq!(SYMBOLS.get("star"), Some(&("\u{2605}", "black star")));
    }

    /// Test card suits.
    #[test]
    fn test_card_suits() {
        assert_eq!(
            SYMBOLS.get("spade"),
            Some(&("\u{2660}", "black spade suit"))
        );
        assert_eq!(
            SYMBOLS.get("heart"),
            Some(&("\u{2665}", "black heart suit"))
        );
        assert_eq!(
            SYMBOLS.get("diamond"),
            Some(&("\u{2666}", "black diamond suit"))
        );
        assert_eq!(SYMBOLS.get("club"), Some(&("\u{2663}", "black club suit")));
    }

    /// Test music notation.
    #[test]
    fn test_music_notation() {
        assert_eq!(
            SYMBOLS.get("sharp"),
            Some(&("\u{266F}", "music sharp sign"))
        );
        assert_eq!(SYMBOLS.get("flat"), Some(&("\u{266D}", "music flat sign")));
        assert_eq!(SYMBOLS.get("note"), Some(&("\u{266A}", "eighth note")));
    }

    /// Test zodiac symbols.
    #[test]
    fn test_zodiac() {
        assert_eq!(SYMBOLS.get("aries"), Some(&("\u{2648}", "aries")));
        assert_eq!(SYMBOLS.get("leo"), Some(&("\u{264C}", "leo")));
        assert_eq!(SYMBOLS.get("pisces"), Some(&("\u{2653}", "pisces")));
    }
}