diff options
author | Sebastian Wiesner <sebastian@swsnr.de> | 2019-03-30 17:01:43 +0100 |
---|---|---|
committer | Sebastian Wiesner <sebastian@swsnr.de> | 2019-03-30 17:01:43 +0100 |
commit | f41dfc6a1c3753f59d2f099b1cdbfe491c380eb3 (patch) | |
tree | c9d2467f465647e98ab829a1e9a3b70117f71a03 | |
parent | 53fb49e2d3a08edd524b581f278f63456ec1bd55 (diff) |
Render task lists nicely
Closes GH-72
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | sample/common-mark.md | 5 | ||||
-rw-r--r-- | src/lib.rs | 6 | ||||
-rw-r--r-- | src/main.rs | 6 | ||||
-rw-r--r-- | tests/formatting.rs | 7 | ||||
-rw-r--r-- | tests/formatting/tasklist.expected.html | 25 | ||||
-rw-r--r-- | tests/formatting/tasklist.md | 2 |
7 files changed, 50 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index ec66ad6..c9f453f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added +- Render task lists nicely (see [GH-72]) + +[GH-72]: https://github.com/lunaryorn/mdcat/issues/72 ## [0.12.1] – 2018-12-24 ### Fixed diff --git a/sample/common-mark.md b/sample/common-mark.md index 87011f8..132f049 100644 --- a/sample/common-mark.md +++ b/sample/common-mark.md @@ -94,6 +94,11 @@ And a mix of both: 3. Text * dolor sit amet +Task lists: + +* [ ] TODO +* [x] DONE + ## Block level elements Block quotes @@ -485,7 +485,11 @@ fn write_event<'io, 'c, 'l, W: Write>( } Ok(ctx) } - TaskListMarker(_) => panic!("mdcat does not support task lists"), + TaskListMarker(checked) => { + let marker = if checked { "\u{2611} " } else { "\u{2610} " }; + ctx.write_highlighted(CowStr::Borrowed(marker))?; + Ok(ctx) + } Start(tag) => start_tag(ctx, tag), End(tag) => end_tag(ctx, tag), Html(content) => { diff --git a/src/main.rs b/src/main.rs index e16307e..582cf1f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,7 +19,7 @@ use mdcat; use clap::value_t; -use pulldown_cmark::Parser; +use pulldown_cmark::{Options, Parser}; use std::error::Error; use std::fs::File; use std::io::prelude::*; @@ -58,7 +58,9 @@ fn process_arguments(size: TerminalSize, args: Arguments) -> Result<(), Box<dyn Ok(()) } else { let (base_dir, input) = read_input(&args.filename)?; - let parser = Parser::new(&input); + let mut options = Options::empty(); + options.insert(Options::ENABLE_TASKLISTS); + let parser = Parser::new_ext(&input, options); if args.dump_events { mdcat::dump_events(&mut std::io::stdout(), parser)?; diff --git a/tests/formatting.rs b/tests/formatting.rs index 82eefcc..9b35a82 100644 --- a/tests/formatting.rs +++ b/tests/formatting.rs @@ -21,7 +21,7 @@ use mdcat; use pretty_assertions::assert_eq; -use pulldown_cmark::Parser; +use pulldown_cmark::{Options, Parser}; use std::fs::File; use std::io::prelude::*; use std::path::{Path, PathBuf}; @@ -43,7 +43,9 @@ fn format_ansi_to_html(markdown: &str) -> String { let size = mdcat::TerminalSize::default(); let syntax_set = SyntaxSet::load_defaults_newlines(); let wd = std::env::current_dir().expect("No working directory"); - let parser = Parser::new(markdown); + let mut options = Options::empty(); + options.insert(Options::ENABLE_TASKLISTS); + let parser = Parser::new_ext(markdown, options); mdcat::push_tty( &mut child.stdin.unwrap(), mdcat::TerminalCapabilities::ansi(), @@ -117,5 +119,6 @@ mod formatting { test_compare_html!(just_a_line); test_compare_html!(links); test_compare_html!(lists); + test_compare_html!(tasklist); } } diff --git a/tests/formatting/tasklist.expected.html b/tests/formatting/tasklist.expected.html new file mode 100644 index 0000000..ba3b8dc --- /dev/null +++ b/tests/formatting/tasklist.expected.html @@ -0,0 +1,25 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf8"> +<title></title> +<style type="text/css"> +.ansi2html-content { display: inline; white-space: pre-wrap; word-wrap: break-word; } +.body_foreground { color: #AAAAAA; } +.body_background { background-color: #000000; } +.body_foreground > .bold,.bold > .body_foreground, body.body_foreground > pre > .bold { color: #FFFFFF; font-weight: normal; } +.inv_foreground { color: #000000; } +.inv_background { background-color: #AAAAAA; } +</style> +</head> +<body class="body_foreground body_background" style="font-size: normal;" > +<pre class="ansi2html-content"> +<span id="line-0"></span> +<span id="line-1">• ☐ A TODO</span> +<span id="line-2">• ☑ This one's done.</span> +<span id="line-3"></span> + +</pre> +</body> + +</html> diff --git a/tests/formatting/tasklist.md b/tests/formatting/tasklist.md new file mode 100644 index 0000000..33a7285 --- /dev/null +++ b/tests/formatting/tasklist.md @@ -0,0 +1,2 @@ +- [ ] A TODO +- [x] This one's done. |