O Cotuba é um gerador de ebooks que converte arquivos escritos no formato Markdown (.md
), em ebooks nos formatos EPUB (.epub
) e PDF (.pdf
).
Cada arquivo .md
do diretório do livro, em ordem alfabética, será transformado em um capítulo do ebook.
- Abra um Terminal e baixe o Cotuba usando o Git:
git clone https://github.com/caelum/cotuba.git
- Entre na pasta do projeto:
cd cotuba
- Faça o build do projeto usando o Maven:
mvn install
- Descompacte o
.zip
gerado para o seu Desktop com o comando:
unzip -o target/cotuba-*-distribution.zip -d ~/Desktop
- Vá até o seu Desktop:
cd ~/Desktop
- O Cotuba já vem com um livro de exemplo. Para gerar um PDF desse livro, faça:
./cotuba.sh -d ~/cotuba/exemplo -f pdf
Verifique se está tudo certo com o PDF gerado.
- Também é possível gerar um EPUB desse livro:
./cotuba.sh -d ~/cotuba/exemplo -f epub
Verifique se o EPUB está OK.
- No Eclipse, vá em File > Import... > Maven > Existing Maven Projects e clique em Next.
- Em Root Directory, aponte para o diretório onde você baixou o Cotuba.
Ou seja, preencha com
/home/<usuario-do-curso>/cotuba
. Não esqueça de trocar<usuario-do-curso>
pelo nome de usuário do curso. Clique em OK. - Clique em Finish e seu projeto será importado.
- Abra a classe
Main
, do pacotecotuba
.
- Clique com o botão direito na classe
Main
e vá em Run As > Run Configurations.... - Dê duplo clique em Java Application para adicionar uma nova configuração.
- Na aba Arguments, coloque
-d /home/<usuario-do-curso>/cotuba/exemplo -f pdf
em Program Arguments. Não esqueça de trocar<usuario-do-curso>
pelo nome de usuário do curso. - Clique em Run.
- Dê Refresh no projeto e veja se o arquivo
book.pdf
foi gerado. - Crie uma outra Run Configuration que gera um EPUB.
O Cotuba foi implementado em Java 8 e usa o Maven como ferramenta de build.
A estrutura do código do Cotuba é a seguinte:
cotuba
├── pom.xml
│
└── src
├── assembly
│ └── distribution.xml
├── main
│ └── java
│ └── cotuba
│ └── Main.java
│
└── scripts
└── cotuba.sh
As seguintes bibliotecas, declaradas como dependências no pom.xml
, são usadas:
- Apache Commons CLI para as opções de linha de comando. Detalhes em: https://commons.apache.org/proper/commons-cli/
- CommonMark Java para renderizar arquivos
.md
para HTML. Detalhes em: https://github.com/atlassian/commonmark-java - iText pdfHTML para gerar os arquivos
.pdf
. Detalhes em: https://github.com/itext/i7j-pdfhtml/ - Epublib para gerar os arquivos
.epub
. Detalhes em: https://github.com/psiegman/epublib
O .zip
, que é o "entregável" do Cotuba, é gerado pelo Maven Assembly Plugin. Mais em: http://maven.apache.org/plugins/maven-assembly-plugin/
A configuração do Assembly Plugin está em src/assembly/distribution.xml
. Nesse XML, é descrito que o .zip
conterá os JARs de todas as bibliotecas e o arquivo src/script/cotuba.sh
.
O código do Cotuba possui apenas uma classe: a classe Main
do pacote cotuba
, que define o método main
e possui cerca de 250 linhas de código.
É um código pequeno e relativamente simples. Mas será que esse código está fácil de ser mantido?
Markdown é uma linguagem de marcação com uma sintaxe simples. Foi criada por John Gruber e Aaron Swartz em 2004. Tem como objetivo ter uma marcação enxuta, sendo o mais próxima o possível de texto puro e podendo ser facilmente convertida para HTML.
Alguns detalhes da sintaxe:
# Título
se transforma em <h1>Título</h1>
## Título
se transforma em <h2>Título</h2>
### Título
se transforma em <h3>Título</h3>
#### Título
se transforma em <h4>Título</h4>
##### Título
se transforma em <h5>Título</h5>
###### Título
se transforma em <h6>Título</h6>
_texto_
se transforma em
<em>texto</em>
**texto**
se transforma em
<strong>texto</strong>
[Caelum](https://www.caelum.com.br)
se transforma em
<a href="https://www.caelum.com.br">Caelum</a>
> Ser ou não ser, eis a questão
se transforma em
<blockquote>Ser ou não ser, eis a questão</blockquote>
A classe `String` é imutável
se transforma em
A classe <code>String</code> é imutável
- modelagem
- dependências
se transforma em
<ul>
<li>modelagem</li>
<li>dependências</li>
</ul>
1. modelagem
2. dependências
se transforma em
<ol>
<li>modelagem</li>
<li>dependências</li>
</ol>
````` ``
public class Pessoa {
private String nome;
}
```
se transforma em
<pre><code>
public class Pessoa {
private String nome;
}
</code></pre>