]>
Commit | Line | Data |
---|---|---|
3c0e092e XL |
1 | # Unindent |
2 | ||
3 | [<img alt="github" src="https://img.shields.io/badge/github-dtolnay/indoc-8da0cb?style=for-the-badge&labelColor=555555&logo=github" height="20">](https://github.com/dtolnay/indoc) | |
4 | [<img alt="crates.io" src="https://img.shields.io/crates/v/unindent.svg?style=for-the-badge&color=fc8d62&logo=rust" height="20">](https://crates.io/crates/unindent) | |
5 | [<img alt="docs.rs" src="https://img.shields.io/badge/docs.rs-unindent-66c2a5?style=for-the-badge&labelColor=555555&logoColor=white&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K" height="20">](https://docs.rs/unindent) | |
6 | [<img alt="build status" src="https://img.shields.io/github/workflow/status/dtolnay/indoc/CI/master?style=for-the-badge" height="20">](https://github.com/dtolnay/indoc/actions?query=branch%3Amaster) | |
7 | ||
8 | This crate provides [`indoc`]'s indentation logic for use with strings that are | |
9 | not statically known at compile time. For unindenting string literals, use | |
10 | `indoc` instead. | |
11 | ||
12 | [`indoc`]: https://github.com/dtolnay/indoc | |
13 | ||
14 | This crate exposes two functions: | |
15 | ||
16 | - `unindent(&str) -> String` | |
17 | - `unindent_bytes(&[u8]) -> Vec<u8>` | |
18 | ||
19 | ```rust | |
20 | use unindent::unindent; | |
21 | ||
22 | fn main() { | |
23 | let indented = " | |
24 | line one | |
25 | line two"; | |
26 | assert_eq!("line one\nline two", unindent(indented)); | |
27 | } | |
28 | ``` | |
29 | ||
30 | ## Explanation | |
31 | ||
32 | The following rules characterize the behavior of unindent: | |
33 | ||
34 | 1. Count the leading spaces of each line, ignoring the first line and any lines | |
35 | that are empty or contain spaces only. | |
36 | 2. Take the minimum. | |
37 | 3. If the first line is empty i.e. the string begins with a newline, remove the | |
38 | first line. | |
39 | 4. Remove the computed number of spaces from the beginning of each line. | |
40 | ||
41 | This means there are a few equivalent ways to format the same string, so choose | |
42 | one you like. All of the following result in the string `"line one\nline | |
43 | two\n"`: | |
44 | ||
45 | ``` | |
46 | unindent(" / unindent( / unindent("line one | |
47 | line one / "line one / line two | |
48 | line two / line two / ") | |
49 | ") / ") / | |
50 | ``` | |
51 | ||
52 | ## License | |
53 | ||
54 | Licensed under either of | |
55 | ||
56 | * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) | |
57 | * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) | |
58 | ||
59 | at your option. | |
60 | ||
61 | ### Contribution | |
62 | ||
63 | Unless you explicitly state otherwise, any contribution intentionally submitted | |
64 | for inclusion in Indoc by you, as defined in the Apache-2.0 license, shall be | |
65 | dual licensed as above, without any additional terms or conditions. |