diff options
Diffstat (limited to 'src/librustdoc/unindent_pass.rs')
| -rw-r--r-- | src/librustdoc/unindent_pass.rs | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/src/librustdoc/unindent_pass.rs b/src/librustdoc/unindent_pass.rs deleted file mode 100644 index 4c2464f8b34..00000000000 --- a/src/librustdoc/unindent_pass.rs +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or -// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license -// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -/*! -Removes the common level of indention from description strings. For -instance, if an entire doc comment is indented 8 spaces we want to -remove those 8 spaces from every line. - -The first line of a string is allowed to be intend less than -subsequent lines in the same paragraph in order to account for -instances where the string containing the doc comment is opened in the -middle of a line, and each of the following lines is indented. -*/ - - -use std::num; -use std::uint; -use pass::Pass; -use text_pass; - -pub fn mk_pass() -> Pass { - text_pass::mk_pass(~"unindent", unindent) -} - -fn unindent(s: &str) -> ~str { - let lines = s.any_line_iter().collect::<~[&str]>(); - let mut saw_first_line = false; - let mut saw_second_line = false; - let min_indent = do lines.iter().fold(uint::max_value) - |min_indent, line| { - - // After we see the first non-whitespace line, look at - // the line we have. If it is not whitespace, and therefore - // part of the first paragraph, then ignore the indentation - // level of the first line - let ignore_previous_indents = - saw_first_line && - !saw_second_line && - !line.is_whitespace(); - - let min_indent = if ignore_previous_indents { - uint::max_value - } else { - min_indent - }; - - if saw_first_line { - saw_second_line = true; - } - - if line.is_whitespace() { - min_indent - } else { - saw_first_line = true; - let mut spaces = 0; - do line.iter().all |char| { - // Only comparing against space because I wouldn't - // know what to do with mixed whitespace chars - if char == ' ' { - spaces += 1; - true - } else { - false - } - }; - num::min(min_indent, spaces) - } - }; - - match lines { - [head, .. tail] => { - let mut unindented = ~[ head.trim() ]; - unindented.push_all(do tail.map |&line| { - if line.is_whitespace() { - line - } else { - assert!(line.len() >= min_indent); - line.slice_from(min_indent) - } - }); - unindented.connect("\n") - } - [] => s.to_owned() - } -} - -#[test] -fn should_unindent() { - let s = ~" line1\n line2"; - let r = unindent(s); - assert_eq!(r, ~"line1\nline2"); -} - -#[test] -fn should_unindent_multiple_paragraphs() { - let s = ~" line1\n\n line2"; - let r = unindent(s); - assert_eq!(r, ~"line1\n\nline2"); -} - -#[test] -fn should_leave_multiple_indent_levels() { - // Line 2 is indented another level beyond the - // base indentation and should be preserved - let s = ~" line1\n\n line2"; - let r = unindent(s); - assert_eq!(r, ~"line1\n\n line2"); -} - -#[test] -fn should_ignore_first_line_indent() { - // Thi first line of the first paragraph may not be indented as - // far due to the way the doc string was written: - // - // #[doc = "Start way over here - // and continue here"] - let s = ~"line1\n line2"; - let r = unindent(s); - assert_eq!(r, ~"line1\nline2"); -} - -#[test] -fn should_not_ignore_first_line_indent_in_a_single_line_para() { - let s = ~"line1\n\n line2"; - let r = unindent(s); - assert_eq!(r, ~"line1\n\n line2"); -} |
