commit 127957f46b54cb0f061413a8a289ee7a9663a9cb Author: tykayn Date: Mon Jan 11 22:42:27 2021 +0100 init ebook maker 🎉 Signed-off-by: Baptiste Lemoine diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9239a64 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/mon_ebook.iml b/.idea/mon_ebook.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/mon_ebook.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5c23bae --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Générateur d'ebook à partir de markdown + +ce dépot présente un dossier de travail pour générer des ebook à partir de documents écrits avec la syntaxe markdown. + +éditeur de texte conseillé pour le markdown: +https://www.zettlr.com/download/deb + +par tykayn pour le CIL de Gometz : www.cil-gometz.org +site perso: www.cipherbliss.com diff --git a/build/.gitkeep b/build/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/build_ebook.sh b/build_ebook.sh new file mode 100644 index 0000000..7fa29f0 --- /dev/null +++ b/build_ebook.sh @@ -0,0 +1,50 @@ +#!/bin/bash + + +# Ce script sert à publier le WhitePaper. +# La première version crée les documents whitepaper.md et whitepaper.html. +# Le doc Markdown complet est volontairement supprimé. Je préfère que les modifications soient faites sur les différentes parties. +# ce script doit être lancé dans le dossier contenant les chapitres. +echo "=============== génération de mon ebook, c'est parti! =============== " +# dépendances : sphinx-build pandoc +hash sphinx-build 2>/dev/null || { echo >&2 "Ce générateur a besoin de la commande sphinx-build pour fonctionner. Mais cette commande n'est pas installée. Fin de l'exécution."; exit 1; } +hash pandoc 2>/dev/null || { echo >&2 "Ce générateur peut utiliser ebook-convert fourni avec Calibre, disponible dans les dépots apt. Mais cette commande n'est pas installée. Fin de l'exécution."; exit 1; } + +# clean build +rm -rf build/* + +## Compilation HTML des différents chapitres +cp source/base_index.rst source/index.rst +for i in chapitres/*.rst ; do + cat $i >> source/index.rst +done + +sphinx-build -b html source build + +if [ -e build/index.html ] ; then + echo "===== HTML OK =====" +fi + +## Compilation PDF +sphinx-build -M latexpdf source build +# deplacement dans le fichier de build +mv ./build/latex/mon_book.pdf ./build/ + +#firefox "$PWD/build/whitepaper_en.html" +## add ebook conversion + +#ebook-convert build/whitepaper_fr.html build/whitepaper_fr.mobi +#ebook-convert build/whitepaper_en.html build/whitepaper_en.mobi +#ebook-convert build/whitepaper_fr.html build/whitepaper_fr.fb2 +#ebook-convert build/whitepaper_en.html build/whitepaper_en.fb2 +#ebook-convert build/whitepaper_fr.html build/whitepaper_fr.epub +#ebook-convert build/whitepaper_en.html build/whitepaper_en.epub + +echo " " +echo "===== ok pour la génération d'ebooks" +ls -lArth build + + +# clean fichiers temporaires + + diff --git a/img/.gitkeep b/img/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/install_dependances_ubuntu.sh b/install_dependances_ubuntu.sh new file mode 100644 index 0000000..9eb774b --- /dev/null +++ b/install_dependances_ubuntu.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +echo " =============================================================================================== " +echo " installation de dépendances pour faire ses propres ebook par tykayn de cipherbliss.com " +echo " =============================================================================================== " + +while true; do + read -p " voulez-vous installer les dépendances nécessaire à la compilation d'ebook ? (o pour oui, n pour non) " yn + case $yn in + [Oo]* ) echo " nous allons installer Calibre et Pandoc avec apt; c'est parti!"; sudo apt install -y calibre pandoc; break;; + [Nn]* ) echo "bon ok ._." ; break;; + * ) echo "Veuillez répondre o pour oui, n pour non .";; + esac +done + +while true; do + read -p " voulez-vous cent balles et un mars ? (o pour oui, n pour non) " yn + case $yn in + [Oo]* ) echo "bah moi aussi tiens."; break;; + [Nn]* ) echo "bon ok ._." ; exit;; + * ) echo "Veuillez répondre o pour oui, n pour non .";; + esac +done + diff --git a/source/00_01_premiere_couverture.md b/source/00_01_premiere_couverture.md new file mode 100644 index 0000000..e761235 --- /dev/null +++ b/source/00_01_premiere_couverture.md @@ -0,0 +1,7 @@ +Mon livre +=== + +Mon sous titre +--- + +par Tykayn diff --git a/source/00_02_preface.md b/source/00_02_preface.md new file mode 100644 index 0000000..eb31912 --- /dev/null +++ b/source/00_02_preface.md @@ -0,0 +1,3 @@ +# Préface + +blah blah diff --git a/source/01_chapitre_1.md b/source/01_chapitre_1.md new file mode 100644 index 0000000..b654e0d --- /dev/null +++ b/source/01_chapitre_1.md @@ -0,0 +1,3 @@ +# Chapitre 1 + +blah blah diff --git a/source/02_chapitre_2.md b/source/02_chapitre_2.md new file mode 100644 index 0000000..e69de29 diff --git a/source/03_chapitre_3.md b/source/03_chapitre_3.md new file mode 100644 index 0000000..e69de29 diff --git a/source/04_chapitre_3.md b/source/04_chapitre_3.md new file mode 100644 index 0000000..e69de29 diff --git a/source/99_00_postface.md b/source/99_00_postface.md new file mode 100644 index 0000000..e69de29 diff --git a/source/99_01_sources.md b/source/99_01_sources.md new file mode 100644 index 0000000..e69de29 diff --git a/source/99_03_table_des_matieres.md b/source/99_03_table_des_matieres.md new file mode 100644 index 0000000..e69de29 diff --git a/source/99_04_derniere_couverture.md b/source/99_04_derniere_couverture.md new file mode 100644 index 0000000..e69de29 diff --git a/table_des_matieres.sh b/table_des_matieres.sh new file mode 100644 index 0000000..be56bf2 --- /dev/null +++ b/table_des_matieres.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# motivation to rewrite a simple alternative to doctoc: How Much Do You Trust That Package? Understanding The Software Supply Chain https://www.youtube.com/watch?v=fnELtqE6mMM +# src https://gist.github.com/meleu/57867f4a01ede1bd730f14b2f018ae89 + +############ +# Generates a Table of Contents getting a markdown file as input. +# +# Inspiration for this script: +# https://medium.com/@acrodriguez/one-liner-to-generate-a-markdown-toc-f5292112fd14 +# +# The list of invalid chars is probably incomplete, but is good enough for my +# current needs. +# Got the list from: +# https://github.com/thlorenz/anchor-markdown-header/blob/56f77a232ab1915106ad1746b99333bf83ee32a2/anchor-markdown-header.js#L25 +# + +INVALID_CHARS="'[]/?!:\`.,()*\";{}+=<>~$|#@&–—" + +check() { + + # src https://stackoverflow.com/questions/6482377/check-existence-of-input-argument-in-a-bash-shell-script + if [ -z "$1" ]; then + echo "Error. No argument found. Put as argument a file.md" + exit 1 + fi + + [[ ! -f "$1" ]] && echo "Error. File not found" && exit + +} + +toc() { + + local line + local level + local title + local anchor + local output + + while IFS='' read -r line || [[ -n "$line" ]]; do + level="$(echo "$line" | sed -E 's/^#(#+).*/\1/; s/#/ /g; s/^ //')" + title="$(echo "$line" | sed -E 's/^#+ //')" + anchor="$(echo "$title" | tr '[:upper:] ' '[:lower:]-' | tr -d "$INVALID_CHARS")" + output=$output"$level- [$title](#$anchor)\n" + done <<< "$(grep -E '^#{2,10} ' "$1" | tr -d '\r')" + + echo "$output" + +} + +insert() { + + local toc_text="$2" + local appname='doctoc.sh' + # inspired in doctoc lines + local start_toc="" + local info_toc="" + local end_toc="" + + toc_block="$start_toc\n$info_toc\n**Table of Contents**\n\n$toc_text\n$end_toc" + + # search multiline toc block -> https://stackoverflow.com/questions/2686147/how-to-find-patterns-across-multiple-lines-using-grep/2686705 + if grep -Pzl "(?s)$start_toc.*\n.*$end_toc" $1 &>/dev/null; then + echo -e "\n Updated content of $appname block for $1 succesfully\n" + # src https://askubuntu.com/questions/533221/how-do-i-replace-multiple-lines-with-single-word-in-fileinplace-replace + sed -i ":a;N;\$!ba;s/$start_toc.*$end_toc/$toc_block/g" $1 + else + echo -e "\n Created $appname block for $1 succesfully\n" + sed -i 1i"$toc_block" "$1" + fi + +} + +main() { + + check "$1" + toc_text=$(toc "$1") + insert "$1" "$toc_text" + +} + +[[ "$0" == "$BASH_SOURCE" ]] && main "$@"