From 4857985d3c4c70421f384624655145ee15980095 Mon Sep 17 00:00:00 2001 From: Ticki Date: Thu, 3 Mar 2016 21:18:17 +0100 Subject: [PATCH] docgen - a manpage generator --- Makefile | 11 ++++++++ crates/docgen/Cargo.lock | 35 ++++++++++++++++++++++++++ crates/docgen/Cargo.toml | 7 ++++++ crates/docgen/src/main.rs | 42 +++++++++++++++++++++++++++++++ crates/docgen/src/test/man/doc-ml | 3 +++ crates/docgen/src/test/man/test1 | 1 + crates/docgen/src/test/man/test2 | 1 + crates/docgen/src/test/test.txt | 17 +++++++++++++ 8 files changed, 117 insertions(+) create mode 100644 crates/docgen/Cargo.lock create mode 100644 crates/docgen/Cargo.toml create mode 100644 crates/docgen/src/main.rs create mode 100644 crates/docgen/src/test/man/doc-ml create mode 100644 crates/docgen/src/test/man/test1 create mode 100644 crates/docgen/src/test/man/test2 create mode 100644 crates/docgen/src/test/test.txt diff --git a/Makefile b/Makefile index 2181e6016..6a3af749d 100644 --- a/Makefile +++ b/Makefile @@ -283,6 +283,17 @@ doc/std: libstd/src/lib.rs libstd/src/*.rs libstd/src/*/*.rs libstd/src/*/*/*.rs doc: doc/kernel doc/std +man: filesystem/man + +filesystem/man: + mkdir man \ + rm -rf filesystem/man |& true \ + cd crates/docgen \ + cargo build --release \ + cd ../../ \ + ./crates/docgen/target/release/docgen \ + mv man filesystem + $(BUILD)/libcore.rlib: rust/src/libcore/lib.rs $(MKDIR) -p $(BUILD) $(RUSTC) $(RUSTCFLAGS) --cfg disable_float -o $@ $< diff --git a/crates/docgen/Cargo.lock b/crates/docgen/Cargo.lock new file mode 100644 index 000000000..8e09c5db0 --- /dev/null +++ b/crates/docgen/Cargo.lock @@ -0,0 +1,35 @@ +[root] +name = "docgen" +version = "0.1.0" +dependencies = [ + "walkdir 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "walkdir" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + diff --git a/crates/docgen/Cargo.toml b/crates/docgen/Cargo.toml new file mode 100644 index 000000000..20ef550dc --- /dev/null +++ b/crates/docgen/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "docgen" +version = "0.1.0" +authors = ["Ticki "] + +[dependencies] +walkdir = "0.1" diff --git a/crates/docgen/src/main.rs b/crates/docgen/src/main.rs new file mode 100644 index 000000000..63c7067de --- /dev/null +++ b/crates/docgen/src/main.rs @@ -0,0 +1,42 @@ +#![feature(unicode)] + +extern crate walkdir; +extern crate rustc_unicode; + +use walkdir::WalkDir; +use std::fs::File; +use std::io::prelude::*; + +fn main() { + for entry in WalkDir::new(".").follow_links(true).into_iter().map(|x| x.expect("Couldn't walk dir.")).filter(|x| x.file_type().is_file()) { + let mut string = String::new(); + + File::open(entry.path()).expect("Could't open file.") + .read_to_string(&mut string) + .expect("Could't read file."); + + for i in string.split("@MANSTART{").skip(1) { + let end_delimiter = i.find('}').expect("Unclosed '{'"); + let name = &i[..end_delimiter]; + assert!(name.lines().count() == 1, "malformed manpage name"); + + let mut man_page = &i[end_delimiter + 1..i.find("@MANEND") + .expect("Unclosed @MANSTART (use @MANEND).")].trim(); + + let mut string = String::with_capacity(man_page.len() + man_page.len() / 3); + + for i in man_page.lines() { + string.push_str(i.trim_left_matches('\\') + .trim_left_matches("// ") + .trim_left_matches("//! ") + .trim_left_matches("/// ") + .trim_left_matches("->") + .trim_left_matches(" +/// test doc mode +/// + +/// +/// test doc mode +/// myltiline +/// Oh, snap. +///