1
0
mirror of https://github.com/lise-henry/crowbook synced 2024-09-24 19:30:40 +02:00
crowbook/README.md

289 lines
10 KiB
Markdown
Raw Normal View History

2016-02-18 04:36:33 +01:00
Crowbook
========
[![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-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
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-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).
### 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
```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
[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
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;
* PDF rendering requires a working installation of LaTeX (preferably
2016-10-21 19:36:50 +02:00
`xelatex`).
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
$ 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 ###
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
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
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
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
> [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
### 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
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
```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`
argument (receiving a single Markdown file instead of a book
2016-11-19 00:29:33 +01:00
configuration file), for short
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)
* [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.
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
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.