#!/bin/sh # # Copyright (c) 2021 Danilo G. Baio # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # # 2. 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. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER OR 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. # shellcheck disable=SC3043 LOCALBASE="/usr/local" ASCIIDOCTORPDF_CMD="${LOCALBASE}/bin/asciidoctor-pdf" ASCIIDOCTOREPUB_CMD="${LOCALBASE}/bin/asciidoctor-epub3" build_pdf() { if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ]; then exit 1 fi local doc_type="$1" local doc_lang="$2" local doc_name="$3" local cur_dir_source="content/$doc_lang/$doc_type/$doc_name/" local cur_dir_output="public/$doc_lang/$doc_type/$doc_name/" if [ ! -d "$cur_dir_output" ]; then mkdir -p "$cur_dir_output" fi if [ "$doc_type" = "books" ]; then local asciidoctor_type="book" if [ -f "${cur_dir_source}book.adoc" ]; then local asciidoctor_file_name="book.adoc" else local asciidoctor_file_name="_index.adoc" fi fi if [ "$doc_type" = "articles" ]; then local asciidoctor_type="article" local asciidoctor_file_name="_index.adoc" fi $ASCIIDOCTORPDF_CMD \ -r ./shared/lib/man-macro.rb \ -r ./shared/lib/git-macro.rb \ -r ./shared/lib/packages-macro.rb \ -r ./shared/lib/inter-document-references-macro.rb \ -r ./shared/lib/sectnumoffset-treeprocessor.rb \ -r ./shared/lib/cross-document-references-macro.rb \ --doctype="$asciidoctor_type" \ -a skip-front-matter \ -a lang="$doc_lang" \ -a isonline=1 \ -a env-beastie=1 \ -a pdf-theme=default-with-fallback-font \ -o "${cur_dir_output}${doc_name}_${doc_lang}.pdf" \ "${cur_dir_source}${asciidoctor_file_name}" } build_epub() { if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ]; then exit 1 fi local doc_type="$1" local doc_lang="$2" local doc_name="$3" local cur_dir_source="content/$doc_lang/$doc_type/$doc_name/" local cur_dir_output="public/$doc_lang/$doc_type/$doc_name/" if [ ! -d "$cur_dir_output" ]; then mkdir -p "$cur_dir_output" fi if [ "$doc_type" = "books" ]; then local asciidoctor_type="book" if [ -f "${cur_dir_source}book.adoc" ]; then local asciidoctor_file_name="book.adoc" else local asciidoctor_file_name="_index.adoc" fi fi if [ "$doc_type" = "articles" ]; then local asciidoctor_type="article" local asciidoctor_file_name="_index.adoc" fi $ASCIIDOCTOREPUB_CMD \ -r ./shared/lib/man-macro.rb \ -r ./shared/lib/git-macro.rb \ -r ./shared/lib/packages-macro.rb \ -r ./shared/lib/inter-document-references-macro.rb \ -r ./shared/lib/sectnumoffset-treeprocessor.rb \ -r ./shared/lib/cross-document-references-macro.rb \ --doctype="$asciidoctor_type" \ -a skip-front-matter \ -a lang="$doc_lang" \ -a isonline=1 \ -a env-beastie=1 \ -o "${cur_dir_output}${doc_name}_${doc_lang}_POC_.epub" \ "${cur_dir_source}${asciidoctor_file_name}" } archive() { if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ]; then exit 1 fi local doc_type="$1" local doc_lang="$2" local doc_name="$3" if [ -d "public/$doc_lang" ]; then local pub_dir="public/$doc_lang/$doc_type/$doc_name/" elif [ -d "public/$doc_type" ]; then # single language build local pub_dir="public/$doc_type/$doc_name/" fi if [ -f "${pub_dir}${doc_name}_${doc_lang}.tar.gz" ]; then rm -f "${pub_dir}${doc_name}_${doc_lang}.tar.gz" fi local source_doc_dir="" if [ -d "public/source/$doc_type/$doc_name/" ]; then source_doc_dir="public/source/$doc_type/$doc_name/" fi local image_doc_dir="" if [ -d "public/images/$doc_type/$doc_name/" ]; then image_doc_dir="public/images/$doc_type/$doc_name/" fi tar -czf "public/${doc_name}_${doc_lang}.tar.gz" \ "$pub_dir" \ public/css/ \ public/fonts/ \ public/js/ \ $source_doc_dir \ $image_doc_dir mv -f "public/${doc_name}_${doc_lang}.tar.gz" "$pub_dir" } main() { if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ]; then echo "Needs parameters (type, language and format)." echo "$0 articles en pdf" exit 1 fi local doc_type="$1" local doc_lang="$2" local doc_format="$3" if [ ! "$doc_type" = "articles" ] && [ ! "$doc_type" = "books" ]; then echo "First parameter needs to be 'articles' or 'books'" exit 1 fi case "$doc_format" in pdf) for document in $(find "content/$doc_lang/$doc_type/" -type d -mindepth 1 -maxdepth 1 | awk -F '/' '{ print $4 }' | sort -n); do if [ "$document" = "pgpkeys" ]; then continue fi echo "asciidoctor build_pdf: $doc_type $doc_lang $document" build_pdf "$doc_type" "$doc_lang" "$document" done ;; archive) for document in $(find "content/$doc_lang/$doc_type/" -type d -mindepth 1 -maxdepth 1 | awk -F '/' '{ print $4 }' | sort -n); do echo "generate archive: $doc_type $doc_lang $document" archive "$doc_type" "$doc_lang" "$document" done ;; epub) for document in $(find "content/$doc_lang/$doc_type/" -type d -mindepth 1 -maxdepth 1 | awk -F '/' '{ print $4 }' | sort -n); do if [ "$document" = "pgpkeys" ]; then continue fi echo "asciidoctor epub: $doc_type $doc_lang $document" build_epub "$doc_type" "$doc_lang" "$document" done ;; *) echo "Formats available: archive, pdf, epub" exit 1 ;; esac } main "$@"