mirror of
https://github.com/tealdeer-rs/tealdeer.git
synced 2026-08-23 16:44:18 +02:00
Initial version: Simply print content without formatting
This commit is contained in:
commit
ba0283a1e7
4 changed files with 95 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
target
|
||||
*.swp
|
||||
12
Cargo.lock
generated
Normal file
12
Cargo.lock
generated
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
[root]
|
||||
name = "tldr"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"ansi_term 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ansi_term"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
7
Cargo.toml
Normal file
7
Cargo.toml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[package]
|
||||
name = "tldr"
|
||||
version = "0.1.0"
|
||||
authors = ["Danilo Bargen <mail@dbrgn.ch>"]
|
||||
|
||||
[dependencies]
|
||||
ansi_term = "^0.7"
|
||||
74
src/main.rs
Normal file
74
src/main.rs
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
extern crate ansi_term;
|
||||
|
||||
use std::io::{BufRead, BufReader};
|
||||
use std::fs::File;
|
||||
use std::{env, process};
|
||||
|
||||
|
||||
enum LineType {
|
||||
Title(String),
|
||||
Empty(String),
|
||||
Description(String),
|
||||
ExampleText(String),
|
||||
ExampleCode(String),
|
||||
}
|
||||
|
||||
struct Tokenizer<R: BufRead> {
|
||||
reader: R,
|
||||
current_line: String,
|
||||
}
|
||||
|
||||
impl<R> Tokenizer<R> where R: BufRead {
|
||||
|
||||
fn new(reader: R) -> Tokenizer<R> {
|
||||
Tokenizer {
|
||||
reader: reader,
|
||||
current_line: String::new(),
|
||||
}
|
||||
}
|
||||
|
||||
fn next(&mut self) -> Option<&str> {
|
||||
self.current_line.clear();
|
||||
let bytes_read = self.reader.read_line(&mut self.current_line).unwrap();
|
||||
match bytes_read {
|
||||
0 => None,
|
||||
_ => Some(&self.current_line),
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// Open file, return a `BufRead` instance
|
||||
fn get_file_reader(filepath: &str) -> Result<BufReader<File>, String> {
|
||||
let file = try!(
|
||||
File::open(filepath)
|
||||
.map_err(|msg| format!("Could not open file: {}", msg))
|
||||
);
|
||||
Ok(BufReader::new(file))
|
||||
}
|
||||
|
||||
|
||||
fn main() {
|
||||
|
||||
// Parse arguments
|
||||
let args: Vec<_> = env::args().collect();
|
||||
if args.len() != 2 {
|
||||
println!("Usage: {} <command>", args[0]);
|
||||
process::exit(1);
|
||||
}
|
||||
|
||||
// Open file
|
||||
let reader = get_file_reader(&args[1]).unwrap_or_else(|msg| {
|
||||
println!("{}", msg);
|
||||
process::exit(1);
|
||||
});
|
||||
|
||||
// Create tokenizer
|
||||
let mut tokenizer = Tokenizer::new(reader);
|
||||
|
||||
// Tokenize and print output
|
||||
while let Some(token) = tokenizer.next() {
|
||||
print!("{}", token);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue