1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
//! *Simple procedural macros to use [`textwrap`] utilities at compile time.* //! //! [`textwrap`]: https://github.com/mgeisler/textwrap //! //! [![TravisCI](https://img.shields.io/travis/althonos/textwrap-macros/master.svg?maxAge=600&style=flat-square)](https://travis-ci.com/althonos/textwrap-macros/branches) //! [![Codecov](https://img.shields.io/codecov/c/gh/althonos/textwrap-macros/master.svg?style=flat-square&maxAge=600)](https://codecov.io/gh/althonos/textwrap-macros) //! [![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square&maxAge=2678400)](https://choosealicense.com/licenses/mit/) //! [![Source](https://img.shields.io/badge/source-GitHub-303030.svg?maxAge=2678400&style=flat-square)](https://github.com/althonos/textwrap-macros) //! [![Crate](https://img.shields.io/crates/v/textwrap-macros.svg?maxAge=600&style=flat-square)](https://crates.io/crates/textwrap-macros) //! [![Documentation](https://img.shields.io/badge/docs.rs-latest-4d76ae.svg?maxAge=2678400&style=flat-square)](https://docs.rs/textwrap-macros) //! [![Changelog](https://img.shields.io/badge/keep%20a-changelog-8A0707.svg?maxAge=2678400&style=flat-square)](https://github.com/althonos/textwrap-macros.rs/blob/master/CHANGELOG.md) //! //! ## Usage //! //! Either use the macros using the old-style `#[macro_use]` or import them as //! any other crate member: //! ```rust //! use textwrap_macros::dedent; //! //! const poem: &str = dedent!(r#" //! When we two parted //! In silence and tears, //! Half broken-hearted //! To sever for years, //! Pale grew thy cheek and cold, //! Colder thy kiss; //! Truly that hour foretold //! Sorrow to this. //! "#); //! ``` //! //! Checkout the [documentation of the original library](https://docs.rs/textwrap/0.11.0/textwrap/) //! for more information about the behaviour of each of the wrapped functions. //! //! ## Changelog //! //! This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html) //! and provides a [changelog](https://github.com/althonos/textwrap-macros/blob/master/CHANGELOG.md) //! in the [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) format. extern crate proc_macro_hack; #[proc_macro_hack::proc_macro_hack] /// Removes common leading whitespace from each line. /// /// This macro will look at each non-empty line and determine the maximum /// amount of whitespace that can be removed from all lines, and create a /// new string literal in place of the old one. /// /// # Usage /// ```rust,ignore /// dedent!($text: lit &str) -> &str /// ``` /// /// # Example /// ```rust /// use textwrap_macros::dedent; /// /// const X: &str = dedent!(" /// 1st line /// 2nd line /// 3rd line /// "); /// /// assert_eq!(X, " /// 1st line /// 2nd line /// 3rd line /// "); /// ``` /// /// See also [`textwrap::dedent`](https://docs.rs/textwrap/latest/textwrap/fn.dedent.html). pub use textwrap_macros_impl::dedent; #[proc_macro_hack::proc_macro_hack] /// Add prefix to each non-empty line. /// /// Empty lines (consisting only of whitespaces, with respect to /// [`char.is_whitespace`](https://doc.rust-lang.org/std/primitive.char.html#method.is_whitespace)) /// are not indented but replaced by a single newline character `\n`. Leading /// and trailing whitespace on non-empty lines is kept unchanged. /// /// # Usage /// ```rust,ignore /// indent!($text: lit &str, $prefix: lit &str) -> &str /// ``` /// /// # Example /// ```rust /// use textwrap_macros::indent; /// /// const Y: &str = indent!(" /// Foo /// Bar /// ", "-> "); /// /// assert_eq!(Y, " /// -> Foo /// -> Bar /// "); /// ``` /// /// See also [textwrap::indent](https://docs.rs/textwrap/latest/textwrap/fn.indent.html). pub use textwrap_macros_impl::indent; #[proc_macro_hack::proc_macro_hack] /// Fill a line of text at `width` characters. /// /// Strings are wrapped based on their displayed width, not their size in bytes. /// The result is a string with newlines between each line. Use `wrap` if /// you need access to the individual lines. /// /// # Usage /// ```rust, ignore /// fill!($text: lit &str, $width: lit usize) -> &str /// ``` /// /// # Example /// ```rust /// use textwrap_macros::fill; /// /// const FILLED: &str = fill!("Memory safety without garbage collection.", 15); /// assert_eq!(FILLED, "Memory safety\nwithout garbage\ncollection."); /// ``` /// /// See also [textwrap::fill](https://docs.rs/textwrap/latest/textwrap/fn.fill.html). pub use textwrap_macros_impl::fill;