2016-02-18 04:36:33 +01:00
|
|
|
Crowbook
|
|
|
|
========
|
|
|
|
|
2016-02-25 19:12:45 +01:00
|
|
|
[![Build Status](https://travis-ci.org/lise-henry/crowbook.svg?branch=master)](https://travis-ci.org/lise-henry/crowbook)
|
|
|
|
|
2016-10-21 19:36:50 +02:00
|
|
|
Render a book written in markdown to HTML, EPUB and/or PDF.
|
2016-02-18 04:36:33 +01:00
|
|
|
|
2016-02-21 21:16:01 +01:00
|
|
|
Crowbook's purpose is to allow you to automatically generate multiple
|
2016-12-16 01:50:04 +01:00
|
|
|
output formats from a book written in Markdown. Its focus is
|
2016-03-01 21:41:23 +01:00
|
|
|
novels, and the default settings should (hopefully) generate readable
|
2016-10-21 19:36:50 +02:00
|
|
|
books with correct typography without requiring you to worry about it.
|
2016-09-28 06:21:47 +02:00
|
|
|
|
2016-03-01 21:41:23 +01:00
|
|
|
Example
|
|
|
|
-------
|
|
|
|
|
2016-10-06 23:05:01 +02:00
|
|
|
To see what Crowbook's output looks like, you can read the Crowbook
|
2016-09-28 06:21:47 +02:00
|
|
|
guide rendered in
|
|
|
|
[HTML](http://lise-henry.github.io/crowbook/book/book.html),
|
2016-10-21 19:36:50 +02:00
|
|
|
[PDF](http://lise-henry.github.io/crowbook/book/book.pdf) or [EPUB](http://lise-henry.github.io/crowbook/book/book.epub).
|
|
|
|
|
2016-11-19 00:29:33 +01:00
|
|
|
You can also play with the [online demo version](http://vps.crowdagger.fr/crowbook/).
|
2016-02-25 19:12:45 +01:00
|
|
|
|
2016-02-18 04:36:33 +01:00
|
|
|
|
2016-10-20 21:14:32 +02:00
|
|
|
|
|
|
|
|
2016-02-25 16:20:33 +01:00
|
|
|
Installing
|
|
|
|
----------
|
|
|
|
|
2016-11-19 00:29:33 +01:00
|
|
|
There are two ways to install Crowbook:
|
2016-02-25 16:20:33 +01:00
|
|
|
|
|
|
|
### Binaries ###
|
2016-02-21 18:28:48 +01:00
|
|
|
|
2016-02-26 19:23:06 +01:00
|
|
|
See [the releases page](https://github.com/lise-henry/crowbook/releases)
|
2016-02-25 16:20:33 +01:00
|
|
|
to download a precompiled binary for your architecture (currently:
|
|
|
|
Linux, Windows and MacOSX). Just extract the archive and run
|
2016-03-01 18:46:59 +01:00
|
|
|
`crowbook` (or `crowbook.exe` on Windows). You might also want to copy
|
|
|
|
the binary somewhere in your `PATH` for later usage.
|
2016-02-25 16:20:33 +01:00
|
|
|
|
2016-11-19 00:29:33 +01:00
|
|
|
If you are on Debian GNU/Linux or Ubuntu (on a PC architecture), you can
|
|
|
|
also download `.deb` packages on
|
|
|
|
[the releases page](https://github.com/lise-henry/crowbook/releases).
|
|
|
|
|
2016-09-28 06:21:47 +02:00
|
|
|
### Using Cargo ###
|
|
|
|
|
|
|
|
[Cargo](https://crates.io/) is the
|
|
|
|
[Rust](https://www.rust-lang.org/)'s package manager. You can
|
|
|
|
[install it here](https://www.rust-lang.org/downloads.html). Once
|
2016-10-18 00:11:27 +02:00
|
|
|
it is done:
|
2016-02-21 18:28:48 +01:00
|
|
|
|
2016-09-15 22:05:11 +02:00
|
|
|
```bash
|
2016-02-21 18:28:48 +01:00
|
|
|
$ cargo install crowbook
|
|
|
|
```
|
|
|
|
|
2016-02-25 16:20:33 +01:00
|
|
|
will automatically download the latest `crowbook` release on
|
2016-09-28 06:21:47 +02:00
|
|
|
[crates.io](https://crates.io/crates/crowbook), compile it, and
|
|
|
|
install it on your system.
|
|
|
|
|
|
|
|
Dependencies
|
|
|
|
------------
|
|
|
|
|
2016-10-21 19:36:50 +02:00
|
|
|
While there should be, strictly speaking, no real dependencies to be able to
|
2016-11-26 04:39:51 +01:00
|
|
|
run Crowbook (it is published as a statically compiled binary), some
|
2016-09-28 06:21:47 +02:00
|
|
|
features require additional commands to work correctly:
|
|
|
|
|
2016-11-19 00:29:33 +01:00
|
|
|
* EPUB rendering requires the `zip` command to be present on your system;
|
2016-09-28 06:21:47 +02:00
|
|
|
* PDF rendering requires a working installation of LaTeX (preferably
|
2016-10-21 19:36:50 +02:00
|
|
|
`xelatex`).
|
2016-09-28 06:21:47 +02:00
|
|
|
|
|
|
|
Quick tour
|
|
|
|
----------
|
2016-02-19 23:01:34 +01:00
|
|
|
|
2016-02-20 17:13:14 +01:00
|
|
|
The simplest command is:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
$ crowbook <BOOK>
|
|
|
|
```
|
|
|
|
|
2016-03-01 21:41:23 +01:00
|
|
|
where `BOOK` is a configuration file. Crowbook will parse this
|
2016-10-21 19:36:50 +02:00
|
|
|
file and generate a book in HTML, EPUB, and/or PDF,
|
2016-03-22 17:47:42 +01:00
|
|
|
according to the settings in the configuration file.
|
2016-02-21 20:33:30 +01:00
|
|
|
|
2016-02-25 16:20:33 +01:00
|
|
|
To create a new book, assuming you have a
|
2016-02-21 20:33:30 +01:00
|
|
|
list of Markdown files, you can generate a template configuration file
|
|
|
|
with the `--create` argument:
|
|
|
|
|
|
|
|
```bash
|
2016-11-26 05:13:48 +01:00
|
|
|
$ crowbook my.book --create chapter_*.md
|
2016-02-21 20:33:30 +01:00
|
|
|
```
|
|
|
|
|
2016-03-01 21:41:23 +01:00
|
|
|
This will generate a default `my.book` file, which you'll need to
|
|
|
|
complete. This configuration file contains some metadata, options, and lists the
|
2016-03-22 17:47:42 +01:00
|
|
|
Markdown files.
|
2016-02-19 23:01:34 +01:00
|
|
|
|
2016-11-19 00:29:33 +01:00
|
|
|
For short books containing only a single Markdown file, it is possible
|
|
|
|
to embed some metadata at the beginning of the file and use the
|
|
|
|
`--single` or `-s` option to run `crowbook` directly on this Markdown
|
|
|
|
file and avoid creating a separate book configuration file:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
$ crowbook -s text.md
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
For more information see the chapters
|
|
|
|
on [the arguments supported by `crowbook`](guide/arguments.md) and on [the configuration file](guide/config.md).
|
|
|
|
|
2016-02-20 17:13:14 +01:00
|
|
|
|
2016-02-19 23:01:34 +01:00
|
|
|
|
2016-02-21 21:16:01 +01:00
|
|
|
Current features
|
|
|
|
----------------
|
|
|
|
|
|
|
|
### Output formats ###
|
|
|
|
|
2016-09-28 06:21:47 +02:00
|
|
|
Crowbook supports HTML, PDF and EPUB (either
|
|
|
|
version 2 or 3) as output formats. See the Crowbook User Guide
|
|
|
|
rendered in
|
|
|
|
[HTML](http://lise-henry.github.io/crowbook/book/book.html),
|
|
|
|
[EPUB](http://lise-henry.github.io/crowbook/book/book.epub) and
|
|
|
|
[PDF](http://lise-henry.github.io/crowbook/book.pdf).
|
|
|
|
|
2016-02-21 21:16:01 +01:00
|
|
|
### Input format ###
|
|
|
|
|
|
|
|
Crowbook uses
|
|
|
|
[pulldown-cmark](https://crates.io/crates/pulldown-cmark) and thus
|
2016-11-19 00:29:33 +01:00
|
|
|
should support most
|
|
|
|
of [CommonMark Markdown](http://commonmark.org/). Inline HTML,
|
|
|
|
however, is not implemented, and probably won't be, as the goal is to have books
|
2016-09-28 06:21:47 +02:00
|
|
|
that can also be generated in PDF (and maybe ODT).
|
|
|
|
|
2016-10-21 19:36:50 +02:00
|
|
|
### Typographic "cleaning" ###
|
2016-02-21 21:16:01 +01:00
|
|
|
|
|
|
|
Maybe the most specific "feature" of Crowbook is that (by default, it
|
2016-09-28 06:21:47 +02:00
|
|
|
can be deactivated) it tries to "clean" the input files. By default,
|
2016-10-18 00:11:27 +02:00
|
|
|
it removes superfluous spaces and tries to use curly quotes. If the
|
|
|
|
book's language is set to french, it also tries its best to respect french
|
2016-09-28 06:21:47 +02:00
|
|
|
typography by replacing spaces with non-breaking ones when it is
|
|
|
|
appropriate (e.g. before '?', '!', ';' or ':').
|
|
|
|
|
2016-12-16 01:50:04 +01:00
|
|
|
> Please
|
2016-09-28 06:21:47 +02:00
|
|
|
> [open an issue](https://github.com/lise-henry/crowbook/issues/new) describing typographic rules if you want it to be
|
2016-12-16 01:50:04 +01:00
|
|
|
> implemented for other languages.
|
2016-02-21 21:16:01 +01:00
|
|
|
|
2016-02-27 04:40:23 +01:00
|
|
|
### Links handling ###
|
|
|
|
|
|
|
|
Crowbook tries to correctly translate local links in the input
|
2016-12-16 01:50:04 +01:00
|
|
|
Markdown files: e.g. if you have a link to a Markdown file that is
|
2016-02-27 04:40:23 +01:00
|
|
|
part of your book, it will be transformed into a link inside the
|
|
|
|
document.
|
|
|
|
|
2016-03-01 21:41:23 +01:00
|
|
|
### Inline YAML blocks ###
|
|
|
|
|
2016-03-22 17:47:42 +01:00
|
|
|
Crowbook supports inline YAML blocks:
|
2016-03-01 21:41:23 +01:00
|
|
|
|
2016-09-15 22:05:11 +02:00
|
|
|
```yaml
|
2016-03-01 21:41:23 +01:00
|
|
|
---
|
|
|
|
author: Me
|
|
|
|
title: My title
|
|
|
|
---
|
|
|
|
```
|
|
|
|
|
2016-11-26 04:39:51 +01:00
|
|
|
This is mostly useful when Crowbook is run with the `--single`
|
2016-09-09 22:51:47 +02:00
|
|
|
argument (receiving a single Markdown file instead of a book
|
2016-11-19 00:29:33 +01:00
|
|
|
configuration file), for short
|
2016-09-28 06:21:47 +02:00
|
|
|
texts that only contain one "chapter".
|
|
|
|
|
|
|
|
### Proofreading ###
|
|
|
|
|
|
|
|
Crowbook can also generate "proofreading" copies in HTML or PDF,
|
|
|
|
highlighting grammar errors and repetitions.
|
|
|
|
|
|
|
|
> This feature has been introduced in version `0.9.1` and is still
|
|
|
|
> experimental. For more information, see
|
2016-10-06 23:05:01 +02:00
|
|
|
> [the proofreading chapter of the guide](guide/proofreading.md).
|
2016-03-01 21:41:23 +01:00
|
|
|
|
|
|
|
### Bugs ###
|
2016-02-19 23:01:34 +01:00
|
|
|
|
2016-03-03 18:26:07 +01:00
|
|
|
See the [github's issue tracker](https://github.com/lise-henry/crowbook/issues).
|
2016-02-19 23:01:34 +01:00
|
|
|
|
2016-03-22 17:38:54 +01:00
|
|
|
Contributors
|
|
|
|
------------
|
|
|
|
|
2016-03-22 17:40:50 +01:00
|
|
|
* [Stéphane Mourey](http://stephanemourey.fr/) `<s+crowbook AT stephanemourey DOT fr>`
|
2016-03-22 17:38:54 +01:00
|
|
|
|
2016-02-19 23:01:34 +01:00
|
|
|
Acknowledgements
|
|
|
|
----------------
|
|
|
|
|
2016-09-16 21:47:15 +02:00
|
|
|
Besides the [Rust](https://www.rust-lang.org/) compiler and standard
|
|
|
|
library, Crowbook uses the following libraries:
|
2016-02-19 23:01:34 +01:00
|
|
|
|
2016-03-22 17:38:54 +01:00
|
|
|
* [pulldown-cmark](https://crates.io/crates/pulldown-cmark)
|
|
|
|
* [yaml-rust](https://crates.io/crates/yaml-rust)
|
|
|
|
* [mustache](https://crates.io/crates/mustache)
|
|
|
|
* [clap](https://github.com/kbknapp/clap-rs)
|
|
|
|
* [chrono](https://crates.io/crates/chrono)
|
|
|
|
* [uuid](https://crates.io/crates/uuid)
|
2016-09-13 02:45:27 +02:00
|
|
|
* [mime_guess](https://crates.io/crates/mime_guess)
|
|
|
|
* [crossbeam](https://crates.io/crates/crossbeam)
|
2016-03-22 17:38:54 +01:00
|
|
|
* [walkdir](https://crates.io/crates/walkdir)
|
2016-03-22 17:47:42 +01:00
|
|
|
* [rustc-serialize](https://crates.io/crates/rustc-serialize)
|
2016-09-28 06:21:47 +02:00
|
|
|
* [caribon](https://crates.io/crates/caribon)
|
|
|
|
* [hyper](https://crates.io/crates/hyper)
|
|
|
|
* [url](https://crates.io/crates/url)
|
2016-10-18 00:52:49 +02:00
|
|
|
* [lazy_static](https://crates.io/crates/lazy_static)
|
|
|
|
* [regex](https://crates.io/crates/regex)
|
2016-11-19 00:29:33 +01:00
|
|
|
* [term](https://crates.io/crates/term)
|
2016-02-19 23:01:34 +01:00
|
|
|
|
2016-09-16 21:47:15 +02:00
|
|
|
It also embeds [Highlight.js](https://highlightjs.org/) in HTML output
|
|
|
|
to enable syntax highlighting for code blocks.
|
|
|
|
|
2016-02-23 23:51:21 +01:00
|
|
|
It also uses configuration files from
|
2016-02-26 23:16:47 +01:00
|
|
|
[rust-everywhere](https://github.com/japaric/rust-everywhere) to use
|
2016-03-01 21:41:23 +01:00
|
|
|
[Travis](https://travis-ci.org/) and
|
2016-02-26 23:16:47 +01:00
|
|
|
[Appveyor](http://www.appveyor.com/) to generate binaries for
|
2016-02-23 23:51:21 +01:00
|
|
|
various platforms on each release.
|
|
|
|
|
2016-02-27 17:02:35 +01:00
|
|
|
While Crowbook directly doesn't use them, there was also inspiration
|
|
|
|
from [Pandoc](http://pandoc.org/) and
|
|
|
|
[mdBook](https://github.com/azerupi/mdBook).
|
|
|
|
|
|
|
|
Also, the [W3C HTML validator](https://validator.w3.org/) and the
|
|
|
|
[IDPF EPUB validator](http://validator.idpf.org/) proved very useful
|
|
|
|
during development.
|
2016-02-19 23:01:34 +01:00
|
|
|
|
2016-02-21 18:28:48 +01:00
|
|
|
ChangeLog
|
2016-10-18 00:52:49 +02:00
|
|
|
-----------
|
2016-02-21 18:28:48 +01:00
|
|
|
|
|
|
|
See [ChangeLog](ChangeLog.md).
|
|
|
|
|
|
|
|
Library
|
|
|
|
-------
|
|
|
|
|
2016-11-26 04:39:51 +01:00
|
|
|
While the main purpose of Crowbook is to be run as a standalone
|
2016-10-21 19:36:50 +02:00
|
|
|
program,
|
2016-02-25 16:20:33 +01:00
|
|
|
the code is written as a library, so if you want to build on it you can
|
2016-09-09 23:10:44 +02:00
|
|
|
use it as such. You can look at the generated documentation on
|
|
|
|
[docs.rs](https://docs.rs/releases/search?query=crowbook).
|
2016-02-21 18:28:48 +01:00
|
|
|
|
2016-12-16 02:06:21 +01:00
|
|
|
Note that, in order to facilitate code reuse, some features have been
|
|
|
|
split to separate libraries:
|
|
|
|
* [crowbook-text-processing](https://github.com/lise-henry/crowbook-text-processing/) contains all the "typographic" functions (smart
|
|
|
|
quotes, handling of non-breaking spaces in french, ...).
|
|
|
|
* [crowbook-intl](https://github.com/lise-henry/crowbook-intl/) is
|
|
|
|
used for the internationalization (translation) process.
|
2016-10-21 19:36:50 +02:00
|
|
|
|
2016-02-21 18:28:48 +01:00
|
|
|
License
|
|
|
|
-------
|
2016-02-19 23:01:34 +01:00
|
|
|
|
2016-02-21 18:28:48 +01:00
|
|
|
Crowbook is free software: you can redistribute it and/or modify it
|
|
|
|
under the terms of the GNU Lesser General Public License (LGPL),
|
|
|
|
version 2.1 or (at your option) any ulterior version. See
|
2016-03-01 21:41:23 +01:00
|
|
|
[LICENSE](LICENSE.md) for more information.
|
2016-02-23 23:51:21 +01:00
|
|
|
|
2016-09-16 21:47:15 +02:00
|
|
|
Crowbook's logo is licensed under the [Creative Commons Attribution 4.0
|
|
|
|
International license](https://creativecommons.org/licenses/by/4.0/deed.en),
|
|
|
|
based on the
|
|
|
|
[Rust logo](https://commons.wikimedia.org/wiki/File:Rust_programming_language_black_logo.svg)
|
|
|
|
by Mozilla Corporation.
|
|
|
|
|
|
|
|
Crowbook includes binary (minified) CSS and Javascript files from
|
|
|
|
[Highlight.js](https://highlightjs.org/), written by Ivan
|
|
|
|
Sagalaev, licensed under the following terms:
|
2016-02-23 23:51:21 +01:00
|
|
|
|
2016-09-16 21:47:15 +02:00
|
|
|
> Copyright (c) 2006, Ivan Sagalaev
|
|
|
|
>
|
|
|
|
> All rights reserved.
|
|
|
|
>
|
|
|
|
> Redistribution and use in source and binary forms, with or without
|
|
|
|
> modification, are permitted provided that the following conditions are met:
|
|
|
|
> * Redistributions of source code must retain the above copyright
|
|
|
|
> notice, this list of conditions and the following disclaimer.
|
|
|
|
> * Redistributions in binary form must reproduce the above copyright
|
|
|
|
> notice, this list of conditions and the following disclaimer in the
|
|
|
|
> documentation and/or other materials provided with the
|
|
|
|
> distribution.
|
|
|
|
> * Neither the name of highlight.js nor the names of its contributors
|
|
|
|
> may be used to endorse or promote products derived from this software
|
|
|
|
> without specific prior written permission.
|
|
|
|
>
|
|
|
|
> THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
|
|
|
|
> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
> DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
|
|
|
|
> DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
> (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
|
> LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
|
|
> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
> (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
> SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|