summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Wiesner <sebastian@swsnr.de>2019-03-30 17:01:43 +0100
committerSebastian Wiesner <sebastian@swsnr.de>2019-03-30 17:01:43 +0100
commitf41dfc6a1c3753f59d2f099b1cdbfe491c380eb3 (patch)
treec9d2467f465647e98ab829a1e9a3b70117f71a03
parent53fb49e2d3a08edd524b581f278f63456ec1bd55 (diff)
Render task lists nicely
Closes GH-72
-rw-r--r--CHANGELOG.md4
-rw-r--r--sample/common-mark.md5
-rw-r--r--src/lib.rs6
-rw-r--r--src/main.rs6
-rw-r--r--tests/formatting.rs7
-rw-r--r--tests/formatting/tasklist.expected.html25
-rw-r--r--tests/formatting/tasklist.md2
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
diff --git a/src/lib.rs b/src/lib.rs
index 519ccd3..7d26707 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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.