• Stars
    star
    718
  • Rank 63,070 (Top 2 %)
  • Language
    Rust
  • License
    GNU Lesser Genera...
  • Created almost 9 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Converts books written in Markdown to HTML, LaTeX/PDF and EPUB

Crowbook

Crowbook's aim is to allow you to write a book in Markdown without worrying about formatting or typography, and let the program generate HTML, PDF and EPUB output for you. Its focus is novels and fiction, and the default settings should (hopefully) generate readable books with correct typography without requiring you to worry about it.

Example

To see what Crowbook's output looks like, you can read the Crowbook guide rendered in HTML, PDF or EPUB.

Installing

There are two ways to install Crowbook: either using precompiled binaries, or compiling it using cargo.

Binaries

See the releases page to download a precompiled binary for your architecture. Just extract the archive and run crowbook (or crowbook.exe on Windows). You might also want to copy the binary somewhere in your PATH for later usage.

Using Cargo

Cargo is the package manager for Rust. You can install it here. Once that is done:

$ cargo install crowbook

will automatically download the latest crowbook release on crates.io, compile it, and install it on your system.

Some dependencies also require building C libraries; you might thus also need to install a C compiler and make/cmake build tools.

Dependencies

While there should be, strictly speaking, no real dependencies to be able to run Crowbook (it is published as a statically compiled binary), PDF rendering requires a working installation of LaTeX (preferably xelatex).

Quick tour

The simplest command is:

$ crowbook <BOOK>

where BOOK is a configuration file. Crowbook will parse this file and generate HTML, EPUB, and/or PDF output formats, according to the settings in the configuration file.

To create a new book, assuming you have a list of Markdown files, you can generate a template configuration file with the --create argument:

$ crowbook my.book --create chapter_*.md

This will generate a default my.book file, which you'll need to complete. This configuration file contains some metadata, options, and lists the Markdown files.

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:

$ crowbook -s text.md

For more information, see the chapters on the arguments supported by crowbook and on the configuration file.

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, EPUB and PDF.

Input format

Crowbook uses pulldown-cmark and thus should support most of CommonMark Markdown. 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).

Typographic "cleaning"

Maybe the most specific "feature" of Crowbook is that it does its best to "clean" the input text before rendering it. By default, it removes superfluous spaces and tries to use curly quotes. If the book's language is set to french, it also tries to respect french typography by replacing spaces with non-breaking ones when it is appropriate (e.g. before '?', '!', ';' or ':').

Please open an issue describing typographic rules if you want them to be implemented for other languages.

Links handling

Crowbook tries to correctly translate local links in the input 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.

Inline YAML blocks

Crowbook supports inline YAML blocks:

---
author: Me
title: My title
---

This is mostly useful when Crowbook is run with the --single argument (receiving a single Markdown file instead of a book configuration file), for short texts that only contain one "chapter".

Interactive fiction

Crowbook has experimental support for writing interactive fiction (only for HTML). For more information, read the interactive fiction chapter.

Customization

While the default settings will hopefully generate something that should look "good enough", it is possible to customize the output, essentially by providing different templates.

Bugs

See the issue tracker on GitHub.

Contributors

lise-henry
Élisabeth Henry
stefan0xC
Stefan Melmuk
hirschenberger
Falco Hirschenberger
Geobert
Geobert Quach
jrappen
Johannes Rappen
taophp
Stéphane Mourey
dkotrada
Alfa
hfiguiere
Hubert Figuière
dvalter
Dmitry Valter
Dylan-DPC
Dylan DPC
steffahn
Frank Steffahn
cuviper
Josh Stone
mgeisler
Martin Geisler
sigurdsvela
Sigurd Svela
twirrim
Twirrim
ar1ocker
Ar1oc

Acknowledgements

Besides the Rust compiler and standard library, Crowbook uses the following libraries: pulldown-cmark, yaml-rust, mustache, clap, chrono, uuid, mime_guess, crossbeam, walkdir, rustc-serialize, caribon, hyper, url, lazy_static, regex, term, numerals, syntect.

It can also embed Highlight.js in HTML output to enable syntax highlighting for code blocks.

It also uses configuration files from rust-everywhere to use Travis and Appveyor to generate binaries for various platforms on each release.

While Crowbook directly doesn't use them, there was also inspiration from Pandoc and mdBook.

Also, the W3C HTML validator and the IDPF EPUB validator proved to be very useful during development and testing.

ChangeLog

See ChangeLog.

Contributing

See how you can contribute to Crowbook.

If you find this project useful, you can also support its author by making a Paypal donation.

Library

While the main purpose of Crowbook is to be run as a standalone program, 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.

Note that, in order to facilitate code reuse, some features have been split to separate libraries:

  • epub-builder makes it easier to generate EPUB files.
  • crowbook-text-processing contains all the "typographic" functions (smart quotes, handling of non-breaking spaces in french, ...).
  • crowbook-intl is used for the internationalization (translation) process.

License

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 later version. See LICENSE for more information.

Crowbook's logo is licensed under the Creative Commons Attribution 4.0 International license, based on the Rust logo by Mozilla Corporation.

Crowbook includes binary (minified) CSS and Javascript files from Highlight.js, written by Ivan Sagalaev, see license

More Repositories

1

epub-builder

A Rust library for generating EPUB files
Rust
134
star
2

books

Tries to provide PDF and EPUB versions of various (maybe) Rust books
Shell
99
star
3

crowbook-intl

A dirty and ugly library to do localization in Rust
Rust
16
star
4

caribon

A repetition detector written in Rust
Rust
14
star
5

stemmer-rs

Stemming library for Rust, using bindings to Snowball C implementation
C
13
star
6

rust-ispell

Rust library for easily calling ispell and aspell
Rust
12
star
7

crowbook-text-processing

Some text processing functions written for Crowbook and moved in a separate library
Rust
12
star
8

textes

Les romans et nouvelles de Lizzie Crowdagger qui sont sous licence CC-By-SA. Textes fantastiques/fantasy/science-fiction, souvent à thématique LGBT, ainsi que des textes en cours d'écritures ou inachevés.
HTML
6
star
9

bench-escape

Bench different way to escape html in rust
Rust
3
star
10

genere

A library for randomization of text respecting grammatical gender of sentences
Rust
2
star
11

tnt

Tiny 'Nux Tarot – A minimalist and work in progress tarot game written in Vala
Vala
2
star
12

anarpg

Anarpg is Not An RPG (but some rules engine that can help making one)
Rust
2
star
13

caribon-server

Webservice for caribon (repetition detector)
HTML
2
star
14

corvidien

2
star
15

crowbook-intl-runtime

Rust
1
star
16

lise-henry.github.io

HTML
1
star
17

tinytarot

TiNy Tarot, a french tarot game
Clojure
1
star
18

scrumble

A scrabble-like game written in Clojure
Clojure
1
star
19

genere-server

A very tiny server to demonstrate Genere
Rust
1
star
20

fr_rust_book

Traduction française du rustbook
1
star
21

writer-scripts

Quelques fichiers LaTeX éventuellement utiles pour mettre en page des nouvelles ou des romans
1
star
22

rmll2017

Présentation aux RMLL 2017 : licences libre et fiction intérêt et impact pour les auteurs et autrices
TeX
1
star
23

isometric

A rust library to create and render isometric worlds (in progress)
Rust
1
star
24

rscheme

A toy scheme interpreter written in Rust
Rust
1
star