Sylvain MahéLe site WebRetour à l'accueilPrincipesPartager des idées et des projets.Contact06.45.49.96.98
contact@sylvainmahe.site
Écriture de la page : Sylvain MahéCréation automatique du contenu d'un livre à partir d'une arborescence de fichiersHabituellement dans le monde informatique digital, il est commun d'archiver des fichiers sur des supports de sauvegarde analogiques ou numériques (rubans perforés, bandes magnétiques, mémoires à base de semi-conducteurs, etc...). C'est oublier que les supports imprimés (livres, documents divers) peuvent également remplir la fonction d'archivage de données :Mais pour effectuer cette translation, soit la copie des fichiers numériques à sauvegarder vers des supports imprimés, un outil intermédiaire automatique est nécessaire. C'est cet outil remplissant cette fonction qui est proposé ici.Cet outil se présente sous la forme d'une routine (pour le système d'exploitation Linux que j'utilise) qui permet de générer automatiquement le contenu d'un livre complet sous la forme d'un seul fichier PDF via une arborescence de fichiers (organisation hiérarchique des fichiers dans des répertoires) dont le contenu UTF-8 est extrait :C'est le contenu UTF-8 (pour "Unicode Transformation Format 8" ou format de transformation Unicode sur 8 bits) de vos fichiers à sauvegarder qui est utilisé afin de générer un fichier unique PDF imprimable (book content.pdf), contenu prenant ainsi la forme de caractères normalisés qui peut être issu de divers langages, soit par exemple du binaire, de l'hexadécimal, du C++, ou tout autre caractère UTF-8 imprimable. Attention cependant, si des caractères dans vos fichiers ne font pas partie de la norme UTF-8, ils ne pourront pas être traités correctement.Le fichier PDF imprimable qui résulte de la translation peut être envoyé à un imprimeur, ce qui donne le résultat suivant :À noter que le format de fichier PDF (pour "Portable Document Format" ou format de document portable) est le standard directement pris en charge par toutes les imprimeries modernes.La routine d'automatisation proposée prend donc en entrée une arborescence de fichiers, et permet de choisir de multiples paramètres détaillés plus bas (comme par exemple les dimensions des pages du livre, les dimensions des marges, etc...). Une fois ces choix effectués, un fichier nommé book content.pdf est créé. Ce fichier répertorie tout le contenu des fichiers de l'arborescence, avec la pagination, la numérotation des lignes (si besoin), la numérotation des pages, et la table des fichiers en toute fin du livre.Ci dessous, la routine (.sh) permettant la création automatique du contenu d'un livre à partir d'une arborescence de fichiers :#!/bin/bash
echo "Page width in mm ?"
read menuWidthPage
echo -e "\nPage height in mm ?"
read menuHeightPage
echo -e "\nPage margin in mm ?"
read menuMarginPage
echo -e "\nGutter margin in mm ?"
read menuMarginGutter
echo -e "\nFont size in mm ?"
read menuFontSize
echo -e "\nFont name ?"
read menuFontName
echo -e "\nCutter margin in mm ?"
read menuMarginCutter
echo -e "\nFile name prefix ?"
read menuPrefixFileName
echo ""
next=false
while [ $next == false ]
do
echo "File size suffix ?"
echo "n = No"
echo "e = English"
echo "f = French"
read menuFileSizeSuffix
if [ $menuFileSizeSuffix == "n" ] || [ $menuFileSizeSuffix == "e" ] || [ $menuFileSizeSuffix == "f" ]
then
next=true
else
clear
fi
done
echo ""
next=false
while [ $next == false ]
do
echo "Line numbering ?"
echo "n = No"
echo "y = Yes"
read menuLineNumbering
if [ $menuLineNumbering == "n" ] || [ $menuLineNumbering == "y" ]
then
next=true
else
clear
fi
done
echo -e "\nFile table title ?"
read menuTitleFileTable
echo ""
next=false
while [ $next == false ]
do
echo "Color style ?"
echo "n = Black and white"
echo "y = Colored"
read menuColorStyle
if [ $menuColorStyle == "n" ] || [ $menuColorStyle == "y" ]
then
next=true
else
clear
fi
done
echo ""
next=false
while [ $next == false ]
do
echo "Sort option ?"
echo "a = Alphanumeric sort"
echo "m = Manual sort"
read menuSortOption
if [ $menuSortOption == "a" ] || [ $menuSortOption == "m" ]
then
next=true
fi
clear
done
rm tmp -r -f
rm "book content.pdf" -f
nameBash=$(basename "$0")
nameLink=$(basename "$1")
countTable=0
shopt -s globstar
for file in **/*
do
if [ -f "$file" ] && [ "$file" != "$nameBash" ] && [ "$file" != "$nameLink" ]
then
fileTable[$countTable]=$file
((countTable++))
fi
done
if [ $countTable == 0 ]
then
echo "No file detected"
else
iterationTable=0
if [ $menuSortOption == "m" ]
then
next=false
while [ $next == false ]
do
echo "Manual sort :"
echo "e = Exit"
echo "s = Save file tree (file.tree)"
echo "l = Load file tree (file.tree)"
echo "d = Delete file tree (file.tree)"
echo ""
echo "File tree :"
for ((iterationTableDisplay=0; $iterationTableDisplay < $countTable; iterationTableDisplay++))
do
if [ $iterationTableDisplay == $iterationTable ]
then
echo $((iterationTableDisplay+1))" = "${fileTable[$iterationTableDisplay]}" <"
else
echo $((iterationTableDisplay+1))" = "${fileTable[$iterationTableDisplay]}
fi
done
read menuManualSort
if [ $menuManualSort == "e" ]
then
next=true
elif [ $menuManualSort == "s" ]
then
rm file.tree -f
for ((iterationTableForWriting=0; $iterationTableForWriting < $countTable; iterationTableForWriting++))
do
echo ${fileTable[$iterationTableForWriting]} >> file.tree
done
elif [ $menuManualSort == "l" ]
then
countTable=0
while read line
do
if [ -f "$line" ]
then
fileTable[$countTable]=$line
((countTable++))
fi
done < file.tree
elif [ $menuManualSort == "d" ]
then
rm file.tree -f
elif (($menuManualSort >= 1 && $menuManualSort <= $countTable))
then
saveTable=${fileTable[$iterationTable]}
fileTable[$iterationTable]=${fileTable[$((menuManualSort-1))]}
fileTable[$((menuManualSort-1))]=$saveTable
fi
clear
if (($iterationTable == $countTable - 1))
then
iterationTable=0
else
((iterationTable++))
fi
done
fi
echo "Progress = 0.0%"
rm tmp -r -f
mkdir tmp
for ((iterationPatternBinary = 0; iterationPatternBinary <= 9; iterationPatternBinary++))
do
patternBinaryTable[$iterationPatternBinary]="¡¿¡¿¡¿¡¿"$(echo "obase=2;"$((iterationPatternBinary+1)) | bc | awk '{ printf "%08d\n", $0 }' | sed -e "s/0/¿/g" -e "s/1/¡/g")"¡¿¡¿¡¿¡¿"
done
printf "\t\n" > tmp/tmpFoldAscii1Byte
printf "\t\t\n" > tmp/tmpFoldAscii2Byte
for ((iterationAscii = 32; iterationAscii < 127; iterationAscii++))
do
printf "\\$(printf %03o "$iterationAscii")\n" >> tmp/tmpFoldAscii1Byte
printf "\\$(printf %03o "$iterationAscii")\\$(printf %03o "$iterationAscii")\n" >> tmp/tmpFoldAscii2Byte
done
sed -i tmp/tmpFoldAscii1Byte -e "s/\t/"${patternBinaryTable[0]}"/g" -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/\\&/"${patternBinaryTable[3]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g"
sed -i tmp/tmpFoldAscii2Byte -e "s/\t/"${patternBinaryTable[0]}"/g" -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/\\&/"${patternBinaryTable[3]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g"
countLineTotal=0
characterMeasure=""
for ((iterationCharacter=0; $iterationCharacter < 1000; iterationCharacter++))
do
characterMeasure=$characterMeasure"_"
done
ratioFontSize=$(inkscape --without-gui -W <(echo "<svg><text font-family=\""$menuFontName"\" font-size=\""$menuFontSize"\">"$characterMeasure"</text></svg>") 2>/dev/null)
countCharacterPerLine=$(echo "("$menuWidthPage"-(("$menuMarginPage"*2)+"$menuMarginGutter"))/("$ratioFontSize"/1000)" | bc -l)
countCharacterPerLineStyle=$(echo "("$menuWidthPage"-(("$menuMarginPage"*2)+("$menuMarginGutter"+"$menuFontSize")))/("$ratioFontSize"/1000)" | bc -l)
countCharacterPerLineDisplay=$(echo "scale=0;("$countCharacterPerLine"*10)/10" | bc -l)
countCharacterPerLineStyleDisplay=$(echo "scale=0;("$countCharacterPerLineStyle"*10)/10" | bc -l)
countLinePerPage=$(echo "("$menuHeightPage"-(("$menuMarginPage"*2)+("$menuFontSize"/3)))/"$menuFontSize | bc -l)
countLinePerPageDisplay=$(echo "scale=0;("$countLinePerPage"*10)/10" | bc -l)
countLineStylePrevious=0
countLineStyleTotal=0
for ((iterationTable=0; $iterationTable < $countTable; iterationTable++))
do
clear
progress=$(echo "25/("$countTable"/("$iterationTable"+1))" | bc -l)
progressDisplay=$(echo "scale=1;(("$progress"+0.05)*10)/10" | bc -l)
if ((${#progressDisplay} == 2))
then
echo "Progress = 0"$progressDisplay"%"
else
echo "Progress = "$progressDisplay"%"
fi
sizeRaw=$(stat -c "%s" "${fileTable[$iterationTable]}")
if [ $sizeRaw == 0 ]
then
if [ $menuFileSizeSuffix == "e" ]
then
size="(0 byte)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="(0 octet)"
fi
elif [ $sizeRaw == 1 ]
then
if [ $menuFileSizeSuffix == "e" ]
then
size="(1 byte)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="(1 octet)"
fi
elif (($sizeRaw < 1024))
then
if [ $menuFileSizeSuffix == "e" ]
then
size="("$sizeRaw" bytes)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="("$sizeRaw" octets)"
fi
elif (($sizeRaw < 1048576))
then
sizeInteger=$((sizeRaw/1024))
sizeDecimal=$(echo "("$sizeRaw"/1024)-"$((sizeRaw/1024)) | bc -l)
sizeDecimalDisplay=$(echo "scale=1;("$sizeDecimal"*10)/10" | bc -l)
sizeNumber=$(echo $sizeRaw"/1024" | bc -l)
sizeNumberDisplay=$(echo "scale=1;("$sizeNumber"*10)/10" | bc -l)
if [ $sizeDecimalDisplay == 0 ]
then
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
if [ $menuFileSizeSuffix == "e" ]
then
size="("$sizeRaw" bytes = "$sizeInteger"KiB)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="("$sizeRaw" octets = "$sizeInteger"Kio)"
fi
else
if [ $menuFileSizeSuffix == "e" ]
then
size="("$sizeRaw" bytes ≈ "$sizeInteger"KiB)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="("$sizeRaw" octets ≈ "$sizeInteger"Kio)"
fi
fi
else
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
if [ $menuFileSizeSuffix == "e" ]
then
size="("$sizeRaw" bytes = "$sizeNumberDisplay"KiB)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="("$sizeRaw" octets = "$sizeNumberDisplay"Kio)"
fi
else
if [ $menuFileSizeSuffix == "e" ]
then
size="("$sizeRaw" bytes ≈ "$sizeNumberDisplay"KiB)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="("$sizeRaw" octets ≈ "$sizeNumberDisplay"Kio)"
fi
fi
fi
elif (($sizeRaw < 1073741824))
then
sizeInteger=$((sizeRaw/1048576))
sizeDecimal=$(echo "("$sizeRaw"/1048576)-"$((sizeRaw/1048576)) | bc -l)
sizeDecimalDisplay=$(echo "scale=1;("$sizeDecimal"*10)/10" | bc -l)
sizeNumber=$(echo $sizeRaw"/1048576" | bc -l)
sizeNumberDisplay=$(echo "scale=1;("$sizeNumber"*10)/10" | bc -l)
if [ $sizeDecimalDisplay == 0 ]
then
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
if [ $menuFileSizeSuffix == "e" ]
then
size="("$sizeRaw" bytes = "$sizeInteger"MiB)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="("$sizeRaw" octets = "$sizeInteger"Mio)"
fi
else
if [ $menuFileSizeSuffix == "e" ]
then
size="("$sizeRaw" bytes ≈ "$sizeInteger"MiB)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="("$sizeRaw" octets ≈ "$sizeInteger"Mio)"
fi
fi
else
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
if [ $menuFileSizeSuffix == "e" ]
then
size="("$sizeRaw" bytes = "$sizeNumberDisplay"MiB)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="("$sizeRaw" octets = "$sizeNumberDisplay"Mio)"
fi
else
if [ $menuFileSizeSuffix == "e" ]
then
size="("$sizeRaw" bytes ≈ "$sizeNumberDisplay"MiB)"
elif [ $menuFileSizeSuffix == "f" ]
then
size="("$sizeRaw" octets ≈ "$sizeNumberDisplay"Mio)"
fi
fi
fi
fi
if [ $menuColorStyle == "y" ] && [ $iterationTable != 0 ]
then
countLineStylePrevious=$(($(wc -l < tmp/tmp2)+(($(wc -l < tmp/tmp2)/(countLinePerPageDisplay-2))*2)))
fi
if [[ ! -z $menuPrefixFileName ]]
then
if [ $menuFileSizeSuffix != "n" ]
then
echo -e $menuPrefixFileName" "${fileTable[$iterationTable]}" "$size"\u00a0:" > tmp/tmpFoldInput
else
echo -e $menuPrefixFileName" "${fileTable[$iterationTable]}"\u00a0:" > tmp/tmpFoldInput
fi
else
if [ $menuFileSizeSuffix != "n" ]
then
echo -e ${fileTable[$iterationTable]}" "$size"\u00a0:" > tmp/tmpFoldInput
else
echo -e ${fileTable[$iterationTable]}"\u00a0:" > tmp/tmpFoldInput
fi
fi
if [ $menuColorStyle == "y" ]
then
valueFold=$countCharacterPerLineStyleDisplay
else
valueFold=$countCharacterPerLineDisplay
fi
sed -i tmp/tmpFoldInput -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/\\&/"${patternBinaryTable[3]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g"
while read lineAscii1Byte <&3 && read lineAscii2Byte <&4
do
sed -i tmp/tmpFoldInput -e "s/"$lineAscii1Byte"/"$lineAscii2Byte"/g"
done 3< tmp/tmpFoldAscii1Byte 4< tmp/tmpFoldAscii2Byte
echo $(head -1 tmp/tmpFoldInput) | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[3]}"/\\&/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" | fold -s -w $((valueFold*2)) | sed -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/\\&/"${patternBinaryTable[3]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g" > tmp/tmpFoldOutput
while read lineAscii1Byte <&3 && read lineAscii2Byte <&4
do
sed -i tmp/tmpFoldOutput -e "s/"$lineAscii2Byte"/"$lineAscii1Byte"/g"
done 3< tmp/tmpFoldAscii1Byte 4< tmp/tmpFoldAscii2Byte
sed -i tmp/tmpFoldOutput -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[3]}"/\\&/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g"
cat tmp/tmpFoldOutput >> tmp/tmp2
countLineStyleNext=$(($(wc -l < tmp/tmp2)+(($(wc -l < tmp/tmp2)/(countLinePerPageDisplay-2))*2)))
if [ $menuColorStyle == "y" ]
then
for ((iterationLineStyle=countLineStylePrevious; $iterationLineStyle < $countLineStyleNext; iterationLineStyle++))
do
if (($iterationLineStyle % $countLinePerPageDisplay < $countLinePerPageDisplay - 2))
then
numberLineStyle[$countLineStyleTotal]=$((iterationLineStyle+1))
((countLineStyleTotal++))
fi
done
fi
quickSearchModulo=false
resultSearchModulo=0
iterationSearchModulo=$countLineStylePrevious
if [ $countLinePerPageDisplay == 3 ]
then
resultSearchModulo=0
elif (($countLineStyleNext - $countLineStylePrevious == 1))
then
resultSearchModulo=1
else
while [ $quickSearchModulo == false ]
do
if (($iterationSearchModulo <= $countLineStyleNext - 1))
then
if (($resultSearchModulo == $countLinePerPageDisplay - 2))
then
resultSearchModulo=0
else
((resultSearchModulo++))
fi
((iterationSearchModulo++))
else
quickSearchModulo=true
fi
done
fi
if [ $resultSearchModulo != 0 ]
then
echo "" >> tmp/tmp2
fi
cp "${fileTable[$iterationTable]}" tmp/tmp1
sed -i tmp/tmp1 -e "s/\t/"${patternBinaryTable[0]}"/g" -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/\\&/"${patternBinaryTable[3]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g"
countTmpLine=$(wc -l < tmp/tmp1)
iterationTmpLine=1
while read line
do
spacePrefixLine=""
for ((iterationSpace=0; $iterationSpace < ${#countTmpLine} - ${#iterationTmpLine}; iterationSpace++))
do
spacePrefixLine=$spacePrefixLine${patternBinaryTable[1]}
done
spacePrefixSubline=""
for ((iterationSpace=0; $iterationSpace < ${#countTmpLine}; iterationSpace++))
do
spacePrefixSubline=$spacePrefixSubline${patternBinaryTable[1]}
done
echo $line > tmp/tmpFoldInput
if [ $menuLineNumbering == "y" ]
then
valueFold=$((countCharacterPerLineDisplay-(${#countTmpLine}+3)))
else
valueFold=$countCharacterPerLineDisplay
fi
while read lineAscii1Byte <&3 && read lineAscii2Byte <&4
do
sed -i tmp/tmpFoldInput -e "s/"$lineAscii1Byte"/"$lineAscii2Byte"/g"
done 3< tmp/tmpFoldAscii1Byte 4< tmp/tmpFoldAscii2Byte
echo $(head -1 tmp/tmpFoldInput) | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[0]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[3]}"/\\&/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" | fold -s -w $((valueFold*2)) | sed -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/ /"${patternBinaryTable[0]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/\\&/"${patternBinaryTable[3]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g" > tmp/tmpFoldOutput
while read lineAscii1Byte <&3 && read lineAscii2Byte <&4
do
sed -i tmp/tmpFoldOutput -e "s/"$lineAscii2Byte"/"$lineAscii1Byte"/g"
done 3< tmp/tmpFoldAscii1Byte 4< tmp/tmpFoldAscii2Byte
iterationTmpSubline=1
while read subline
do
if [ $menuLineNumbering == "y" ]
then
if [ $iterationTmpSubline == 1 ]
then
echo $spacePrefixLine$iterationTmpLine" : "$subline | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[0]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[3]}"/\\&/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" >> tmp/tmp2
else
echo $spacePrefixSubline" : "$subline | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[0]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[3]}"/\\&/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" >> tmp/tmp2
fi
else
echo $subline | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[0]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[3]}"/\\&/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" >> tmp/tmp2
fi
((iterationTmpSubline++))
done < tmp/tmpFoldOutput
((iterationTmpLine++))
done < tmp/tmp1
countLine=$(wc -l < tmp/tmp2)
iterationLinePerPage=0
fillPage=$((countLinePerPageDisplay-2))
for ((iterationLine=0; $iterationLine < $countLine - 1; iterationLine++))
do
if (($iterationLinePerPage == $countLinePerPageDisplay - 3))
then
fillPage=$((fillPage+(countLinePerPageDisplay-2)))
iterationLinePerPage=0
else
((iterationLinePerPage++))
fi
done
for ((iterationLine=0; $iterationLine < $fillPage - $countLine; iterationLine++))
do
echo "" >> tmp/tmp2
done
titlePageTable[$iterationTable]=${fileTable[$iterationTable]}
if [ $countLineTotal == 0 ]
then
numberPageTable[$iterationTable]=1
else
numberPageTable[$iterationTable]=$(((countLineTotal/(countLinePerPageDisplay-2))+1))
fi
countLineTotal=$(wc -l < tmp/tmp2)
done
iterationLinePerPage=0
numberPageContent=1
flipFlop=false
for ((iterationLine=0; $iterationLine < $countLineTotal; iterationLine++))
do
if (($iterationLinePerPage == $countLinePerPageDisplay - 1))
then
sed -i tmp/tmp2 -e $iterationLine"i\\\\"
if [ $flipFlop == false ]
then
lenghtNumberPageContent=${#numberPageContent}
fillSpace=""
for ((iterationCharacter=0; $iterationCharacter < $countCharacterPerLineDisplay - $lenghtNumberPageContent; iterationCharacter++))
do
fillSpace=$fillSpace${patternBinaryTable[1]}
done
sed -i tmp/tmp2 -e $((iterationLine+1))"i"$fillSpace$numberPageContent | sed -e "s/"${patternBinaryTable[1]}"/ /g"
flipFlop=true
else
sed -i tmp/tmp2 -e $((iterationLine+1))"i"$numberPageContent
flipFlop=false
fi
iterationLinePerPage=0
((numberPageContent++))
clear
progress=$(echo "25+(50/("$countLineTotal"/("$iterationLine"+1)))" | bc -l)
progressDisplay=$(echo "scale=1;(("$progress"+0.05)*10)/10" | bc -l)
echo "Progress = "$progressDisplay"%"
else
((iterationLinePerPage++))
fi
countLineTotal=$(wc -l < tmp/tmp2)
done
if [ $flipFlop == false ]
then
lenghtNumberPageContent=${#numberPageContent}
fillSpace=""
for ((iterationCharacter=0; $iterationCharacter < $countCharacterPerLineDisplay - $lenghtNumberPageContent; iterationCharacter++))
do
fillSpace=$fillSpace${patternBinaryTable[1]}
done
echo -e "\n"$fillSpace$numberPageContent | sed -e "s/"${patternBinaryTable[1]}"/ /g" >> tmp/tmp2
else
echo -e "\n"$numberPageContent >> tmp/tmp2
fi
if [ $menuColorStyle == "y" ]
then
countLineStylePrevious=$(wc -l < tmp/tmp2)
fi
if [[ ! -z $menuTitleFileTable ]]
then
if [ $menuColorStyle == "y" ]
then
echo -e $menuTitleFileTable"\u00a0:" > tmp/tmpFoldInput
else
echo -e $menuTitleFileTable"\u00a0:" > tmp/tmpFoldInput
fi
else
if [ $menuColorStyle == "y" ]
then
echo -e "File table\u00a0:" > tmp/tmpFoldInput
else
echo -e "File table\u00a0:" > tmp/tmpFoldInput
fi
fi
if [ $menuColorStyle == "y" ]
then
valueFold=$countCharacterPerLineStyleDisplay
else
valueFold=$countCharacterPerLineDisplay
fi
sed -i tmp/tmpFoldInput -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/\\&/"${patternBinaryTable[3]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g"
while read lineAscii1Byte <&3 && read lineAscii2Byte <&4
do
sed -i tmp/tmpFoldInput -e "s/"$lineAscii1Byte"/"$lineAscii2Byte"/g"
done 3< tmp/tmpFoldAscii1Byte 4< tmp/tmpFoldAscii2Byte
echo $(head -1 tmp/tmpFoldInput) | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[3]}"/\\&/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" | fold -s -w $((valueFold*2)) | sed -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/\\&/"${patternBinaryTable[3]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g" > tmp/tmpFoldOutput
while read lineAscii1Byte <&3 && read lineAscii2Byte <&4
do
sed -i tmp/tmpFoldOutput -e "s/"$lineAscii2Byte"/"$lineAscii1Byte"/g"
done 3< tmp/tmpFoldAscii1Byte 4< tmp/tmpFoldAscii2Byte
sed -i tmp/tmpFoldOutput -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[3]}"/\\&/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g"
cat tmp/tmpFoldOutput >> tmp/tmp2
countLineStyleNext=$(wc -l < tmp/tmp2)
if [ $menuColorStyle == "y" ]
then
for ((iterationLineStyle=countLineStylePrevious; $iterationLineStyle < $countLineStyleNext; iterationLineStyle++))
do
numberLineStyle[$countLineStyleTotal]=$((iterationLineStyle+1))
((countLineStyleTotal++))
done
fi
if (($countLineStyleNext % $countLinePerPageDisplay != 0))
then
echo "" >> tmp/tmp2
fi
lenghtMaxTitlePageTable=$(((countCharacterPerLineDisplay-3)-${#numberPageTable[$((countTable-1))]}))
for ((iterationTable=0; $iterationTable < $countTable; iterationTable++))
do
echo ${titlePageTable[$iterationTable]} > tmp/tmpFoldInput
valueFold=$lenghtMaxTitlePageTable
sed -i tmp/tmpFoldInput -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/\\&/"${patternBinaryTable[3]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g"
while read lineAscii1Byte <&3 && read lineAscii2Byte <&4
do
sed -i tmp/tmpFoldInput -e "s/"$lineAscii1Byte"/"$lineAscii2Byte"/g"
done 3< tmp/tmpFoldAscii1Byte 4< tmp/tmpFoldAscii2Byte
echo $(head -1 tmp/tmpFoldInput) | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[3]}"/\\&/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" | fold -s -w $((valueFold*2)) | sed -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/\\&/"${patternBinaryTable[3]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g" > tmp/tmpFoldOutput
while read lineAscii1Byte <&3 && read lineAscii2Byte <&4
do
sed -i tmp/tmpFoldOutput -e "s/"$lineAscii2Byte"/"$lineAscii1Byte"/g"
done 3< tmp/tmpFoldAscii1Byte 4< tmp/tmpFoldAscii2Byte
sed -i tmp/tmpFoldOutput -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[3]}"/\\&/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g"
cat tmp/tmpFoldOutput > tmp/tmp3
countTmpLine=$(wc -l < tmp/tmp3)
iterationTmpLine=1
point="."
while read line
do
if [ $iterationTmpLine != $countTmpLine ]
then
echo $line >> tmp/tmp2
else
lenghtLastLine=$((${#line}+${#numberPageTable[$iterationTable]}))
for ((iterationCharacter=0; $iterationCharacter < $countCharacterPerLineDisplay - ($lenghtLastLine + 3); iterationCharacter++))
do
point=$point"."
done
echo $line" "$point" "${numberPageTable[$iterationTable]} >> tmp/tmp2
fi
((iterationTmpLine++))
done < tmp/tmp3
done
countLineTotal=$(wc -l < tmp/tmp2)
iterationLinePerPage=0
fillPage=$countLinePerPageDisplay
for ((iterationLine=0; $iterationLine < $countLineTotal - 1; iterationLine++))
do
if (($iterationLinePerPage == $countLinePerPageDisplay - 1))
then
fillPage=$((fillPage+countLinePerPageDisplay))
iterationLinePerPage=0
else
((iterationLinePerPage++))
fi
done
for ((iterationLine=0; $iterationLine < $fillPage - $countLineTotal; iterationLine++))
do
echo "" >> tmp/tmp2
done
iterationLine=0
iterationPage=0
firstPage=false
flipFlop=false
countPageTotal=$(($(wc -l < tmp/tmp2)/countLinePerPageDisplay))
iterationLineStyle=0
iterationLineTotal=1
styleColor=false
styleSize=false
sed -i tmp/tmp2 -e "s/ /"${patternBinaryTable[1]}"/g" -e "s/\\$/"${patternBinaryTable[2]}"/g" -e "s/*/"${patternBinaryTable[4]}"/g" -e "s/\\./"${patternBinaryTable[5]}"/g" -e "s/\\//"${patternBinaryTable[6]}"/g" -e "s/\\[/"${patternBinaryTable[7]}"/g" -e "s/\\\/"${patternBinaryTable[8]}"/g" -e "s/\\^/"${patternBinaryTable[9]}"/g"
while read line
do
if [ $iterationLine == 0 ]
then
echo "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" > tmp/tmp.svg
echo "<svg width=\""$(echo "("$menuMarginCutter"*2)+"$menuWidthPage | bc -l)"mm\" height=\""$(echo "("$menuMarginCutter"*2)+"$menuHeightPage | bc -l)"mm\">" >> tmp/tmp.svg
fi
if (($iterationLineStyle < $countLineStyleTotal))
then
if (($iterationLineStyle > 0))
then
if (($iterationLine != 0 && ${numberLineStyle[$iterationLineStyle]} - 1 == ${numberLineStyle[$((iterationLineStyle-1))]}))
then
styleSize=true
else
styleSize=false
fi
fi
if [ ${numberLineStyle[$iterationLineStyle]} == $iterationLineTotal ]
then
styleColor=true
((iterationLineStyle++))
else
styleColor=false
fi
else
styleColor=false
fi
if [ $flipFlop == false ]
then
if [ $styleColor == false ]
then
echo "<text x=\""$(echo $menuMarginCutter"+("$menuMarginGutter"+"$menuMarginPage")" | bc -l)"mm\" y=\""$(echo $menuMarginCutter"+("$menuMarginPage"+("$menuFontSize"*("$iterationLine"+1)))" | bc -l)"mm\" text-anchor=\"start\" font-family=\""$menuFontName"\" font-size=\""$menuFontSize"mm\" fill=\"#000000\" xml:space=\"preserve\">"$(echo $line | sed -e "s/&/&/g" -e "s/</\</g" -e "s/>/\>/g" -e "s/\"/\"/g" -e "s/'/\'/g")"</text>" | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" >> tmp/tmp.svg
else
if [ $styleSize == false ]
then
echo "<rect x=\""$(echo $menuMarginCutter"+("$menuMarginGutter"+"$menuMarginPage")" | bc -l)"mm\" y=\""$(echo $menuMarginCutter"+("$menuMarginPage"+("$menuFontSize"*"$iterationLine"))" | bc -l)"mm\" width=\""$(echo $menuWidthPage"-("$menuMarginGutter"+("$menuMarginPage"*2))" | bc -l)"mm\" height=\""$(echo $menuFontSize"+("$menuFontSize"/3)" | bc -l)"mm\" fill=\"#ff0000\"/>" >> tmp/tmp.svg
else
echo "<rect x=\""$(echo $menuMarginCutter"+("$menuMarginGutter"+"$menuMarginPage")" | bc -l)"mm\" y=\""$(echo "("$menuMarginCutter"+("$menuMarginPage"+("$menuFontSize"*"$iterationLine")))+("$menuFontSize"/3)" | bc -l)"mm\" width=\""$(echo $menuWidthPage"-("$menuMarginGutter"+("$menuMarginPage"*2))" | bc -l)"mm\" height=\""$menuFontSize"mm\" fill=\"#ff0000\"/>" >> tmp/tmp.svg
fi
echo "<text x=\""$(echo $menuMarginCutter"+(("$menuMarginGutter"+"$menuMarginPage")+("$menuFontSize"/2))" | bc -l)"mm\" y=\""$(echo $menuMarginCutter"+("$menuMarginPage"+("$menuFontSize"*("$iterationLine"+1)))" | bc -l)"mm\" text-anchor=\"start\" font-family=\""$menuFontName"\" font-size=\""$menuFontSize"mm\" fill=\"#ffffff\" xml:space=\"preserve\">"$(echo $line | sed -e "s/&/&/g" -e "s/</\</g" -e "s/>/\>/g" -e "s/\"/\"/g" -e "s/'/\'/g")"</text>" | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" >> tmp/tmp.svg
fi
else
if [ $styleColor == false ]
then
echo "<text x=\""$(echo $menuMarginCutter"+"$menuMarginPage | bc -l)"mm\" y=\""$(echo $menuMarginCutter"+("$menuMarginPage"+("$menuFontSize"*("$iterationLine"+1)))" | bc -l)"mm\" text-anchor=\"start\" font-family=\""$menuFontName"\" font-size=\""$menuFontSize"mm\" fill=\"#000000\" xml:space=\"preserve\">"$(echo $line | sed -e "s/&/&/g" -e "s/</\</g" -e "s/>/\>/g" -e "s/\"/\"/g" -e "s/'/\'/g")"</text>" | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" >> tmp/tmp.svg
else
if [ $styleSize == false ]
then
echo "<rect x=\""$(echo $menuMarginCutter"+"$menuMarginPage | bc -l)"mm\" y=\""$(echo $menuMarginCutter"+("$menuMarginPage"+("$menuFontSize"*"$iterationLine"))" | bc -l)"mm\" width=\""$(echo $menuWidthPage"-("$menuMarginGutter"+("$menuMarginPage"*2))" | bc -l)"mm\" height=\""$(echo $menuFontSize"+("$menuFontSize"/3)" | bc -l)"mm\" fill=\"#ff0000\"/>" >> tmp/tmp.svg
else
echo "<rect x=\""$(echo $menuMarginCutter"+"$menuMarginPage | bc -l)"mm\" y=\""$(echo "("$menuMarginCutter"+("$menuMarginPage"+("$menuFontSize"*"$iterationLine")))+("$menuFontSize"/3)" | bc -l)"mm\" width=\""$(echo $menuWidthPage"-("$menuMarginGutter"+("$menuMarginPage"*2))" | bc -l)"mm\" height=\""$menuFontSize"mm\" fill=\"#ff0000\"/>" >> tmp/tmp.svg
fi
echo "<text x=\""$(echo $menuMarginCutter"+("$menuMarginPage"+("$menuFontSize"/2))" | bc -l)"mm\" y=\""$(echo $menuMarginCutter"+("$menuMarginPage"+("$menuFontSize"*("$iterationLine"+1)))" | bc -l)"mm\" text-anchor=\"start\" font-family=\""$menuFontName"\" font-size=\""$menuFontSize"mm\" fill=\"#ffffff\" xml:space=\"preserve\">"$(echo $line | sed -e "s/&/&/g" -e "s/</\</g" -e "s/>/\>/g" -e "s/\"/\"/g" -e "s/'/\'/g")"</text>" | sed -e "s/"${patternBinaryTable[1]}"/ /g" -e "s/"${patternBinaryTable[2]}"/\\$/g" -e "s/"${patternBinaryTable[4]}"/*/g" -e "s/"${patternBinaryTable[5]}"/\\./g" -e "s/"${patternBinaryTable[6]}"/\\//g" -e "s/"${patternBinaryTable[7]}"/\\[/g" -e "s/"${patternBinaryTable[8]}"/\\\/g" -e "s/"${patternBinaryTable[9]}"/\\^/g" >> tmp/tmp.svg
fi
fi
if (($iterationLine == $countLinePerPageDisplay - 1))
then
echo "<rect x=\"0mm\" y=\"0mm\" width=\""$(echo "("$menuMarginCutter"*2)+"$menuWidthPage | bc -l)"mm\" height=\""$(echo $menuMarginCutter"+"$menuMarginPage | bc -l)"mm\" fill=\"#ffffff\"/>" >> tmp/tmp.svg
echo "<rect x=\"0mm\" y=\""$(echo $menuMarginCutter"+("$menuHeightPage"-"$menuMarginPage")" | bc -l)"mm\" width=\""$(echo "("$menuMarginCutter"*2)+"$menuWidthPage | bc -l)"mm\" height=\""$(echo $menuMarginCutter"+"$menuMarginPage | bc -l)"mm\" fill=\"#ffffff\"/>" >> tmp/tmp.svg
echo "<rect x=\"0mm\" y=\""$(echo $menuMarginCutter"+"$menuMarginPage | bc -l)"mm\" width=\""$(echo $menuMarginCutter"+"$menuMarginPage | bc -l)"mm\" height=\""$(echo $menuHeightPage"-("$menuMarginPage"*2)" | bc -l)"mm\" fill=\"#ffffff\"/>" >> tmp/tmp.svg
echo "<rect x=\""$(echo $menuMarginCutter"+("$menuWidthPage"-"$menuMarginPage")" | bc -l)"mm\" y=\""$(echo $menuMarginCutter"+"$menuMarginPage | bc -l)"mm\" width=\""$(echo $menuMarginCutter"+"$menuMarginPage | bc -l)"mm\" height=\""$(echo $menuHeightPage"-("$menuMarginPage"*2)" | bc -l)"mm\" fill=\"#ffffff\"/>" >> tmp/tmp.svg
echo "</svg>" >> tmp/tmp.svg
if [ $firstPage == false ]
then
rsvg-convert -f pdf -d 72 -p 72 tmp/tmp.svg -o tmp/tmp1.pdf
firstPage=true
else
rsvg-convert -f pdf -d 72 -p 72 tmp/tmp.svg -o tmp/tmp2.pdf
pdftk tmp/tmp1.pdf tmp/tmp2.pdf cat output tmp/tmp3.pdf
mv tmp/tmp3.pdf tmp/tmp1.pdf
fi
if [ $flipFlop == false ]
then
flipFlop=true
else
flipFlop=false
fi
iterationLine=0
((iterationPage++))
clear
progress=$(echo "75+(25/("$countPageTotal"/"$iterationPage"))" | bc -l)
progressDisplay=$(echo "scale=1;(("$progress"+0.05)*10)/10" | bc -l)
echo "Progress = "$progressDisplay"%"
else
((iterationLine++))
fi
((iterationLineTotal++))
done < tmp/tmp2
exiftool -q -m -all= tmp/tmp1.pdf
mv tmp/tmp1.pdf "book content.pdf"
rm tmp -r -f
lenghtTotalCover=$(echo "(("$menuMarginCutter"*2)+("$menuWidthPage"*2))+("$countPageTotal"*0.06)" | bc -l)
widthFrontBackCover=$(echo $menuMarginCutter"+"$menuWidthPage | bc -l)
heightFrontBackCover=$(echo "("$menuMarginCutter"*2)+"$menuHeightPage | bc -l)
widthSideCover=$(echo "("$countPageTotal"*0.06)" | bc -l)
lenghtTotalCoverDisplay=$(echo "scale=3;(("$lenghtTotalCover"+0.0005)*10)/10" | bc -l)
widthFrontBackCoverDisplay=$(echo "scale=3;(("$widthFrontBackCover"+0.0005)*10)/10" | bc -l)
heightFrontBackCoverDisplay=$(echo "scale=3;(("$heightFrontBackCover"+0.0005)*10)/10" | bc -l)
widthSideCoverDisplay=$(echo "scale=3;(("$widthSideCover"+0.0005)*10)/10" | bc -l)
sizeRaw=0
for ((iterationTable=0; $iterationTable < $countTable; iterationTable++))
do
sizeRaw=$((sizeRaw+$(stat -c "%s" "${fileTable[$iterationTable]}")))
done
if [ $sizeRaw == 0 ]
then
size="0 byte"
elif [ $sizeRaw == 1 ]
then
size="1 byte"
elif (($sizeRaw < 1024))
then
size=$sizeRaw" bytes"
elif (($sizeRaw < 1048576))
then
sizeInteger=$((sizeRaw/1024))
sizeDecimal=$(echo "("$sizeRaw"/1024)-"$((sizeRaw/1024)) | bc -l)
sizeDecimalDisplay=$(echo "scale=1;("$sizeDecimal"*10)/10" | bc -l)
sizeNumber=$(echo $sizeRaw"/1024" | bc -l)
sizeNumberDisplay=$(echo "scale=1;("$sizeNumber"*10)/10" | bc -l)
if [ $sizeDecimalDisplay == 0 ]
then
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size=$sizeRaw" bytes ("$sizeInteger"KiB)"
else
size=$sizeRaw" bytes (≈ "$sizeInteger"KiB)"
fi
else
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size=$sizeRaw" bytes ("$sizeNumberDisplay"KiB)"
else
size=$sizeRaw" bytes (≈ "$sizeNumberDisplay"KiB)"
fi
fi
elif (($sizeRaw < 1073741824))
then
sizeInteger=$((sizeRaw/1048576))
sizeDecimal=$(echo "("$sizeRaw"/1048576)-"$((sizeRaw/1048576)) | bc -l)
sizeDecimalDisplay=$(echo "scale=1;("$sizeDecimal"*10)/10" | bc -l)
sizeNumber=$(echo $sizeRaw"/1048576" | bc -l)
sizeNumberDisplay=$(echo "scale=1;("$sizeNumber"*10)/10" | bc -l)
if [ $sizeDecimalDisplay == 0 ]
then
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size=$sizeRaw" bytes ("$sizeInteger"MiB)"
else
size=$sizeRaw" bytes (≈ "$sizeInteger"MiB)"
fi
else
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size=$sizeRaw" bytes ("$sizeNumberDisplay"MiB)"
else
size=$sizeRaw" bytes (≈ "$sizeNumberOne"MiB)"
fi
fi
fi
clear
echo "Book cover specifications for printing :"
if ((${#lenghtTotalCoverDisplay} == 4))
then
echo "Total lenght (front + side + back) = 0"$lenghtTotalCoverDisplay"mm"
else
echo "Total lenght (front + side + back) = "$lenghtTotalCoverDisplay"mm"
fi
if ((${#widthFrontBackCoverDisplay} == 4))
then
echo "Front width = 0"$widthFrontBackCoverDisplay"mm"
else
echo "Front width = "$widthFrontBackCoverDisplay"mm"
fi
if ((${#heightFrontBackCoverDisplay} == 4))
then
echo "Front height = 0"$heightFrontBackCoverDisplay"mm"
else
echo "Front height = "$heightFrontBackCoverDisplay"mm"
fi
if ((${#widthSideCoverDisplay} == 4))
then
echo "Side width = 0"$widthSideCoverDisplay"mm"
else
echo "Side width = "$widthSideCoverDisplay"mm"
fi
if ((${#heightFrontBackCoverDisplay} == 4))
then
echo "Side height = 0"$heightFrontBackCoverDisplay"mm"
else
echo "Side height = "$heightFrontBackCoverDisplay"mm"
fi
if ((${#widthFrontBackCoverDisplay} == 4))
then
echo "Back width = 0"$widthFrontBackCoverDisplay"mm"
else
echo "Back width = "$widthFrontBackCoverDisplay"mm"
fi
if ((${#heightFrontBackCoverDisplay} == 4))
then
echo "Back height = 0"$heightFrontBackCoverDisplay"mm"
else
echo "Back height = "$heightFrontBackCoverDisplay"mm"
fi
echo -e "\nBook content specifications for printing :"
echo "Number of pages = "$countPageTotal
if [ $countTable == 1 ]
then
echo "Total file size = "$size
else
echo "Total files size = "$size
fi
fi
read
exit 0La routine présentée ci-dessus utilise les programmes (ou paquets) inkscape, librsvg2-bin, pdftk, et exiftool afin d'effectuer tous les traitements nécessaires.Il vous faut donc les installer à l'aide de la ligne de commande suivante (à écrire dans le terminal de Linux) :sudo apt-get install inkscape librsvg2-bin pdftk exiftool -yUne fois cette installation effectuée, lorsque vous exécutez la routine (.sh), se propose à vous dans l'ordre d'apparition les questions suivantes :- Page width in mm ? : largeur des pages (en millimètres).
- Page height in mm ? : hauteur des pages (en millimètres).
- Page margin in mm ? : dimensions des marges générales (en millimètres).
- Gutter margin in mm ? : dimension de la marge de reliure qui servira à positionner le texte en retrait par rapport à la reliure du livre afin de faciliter l'ergonomie de lecture (en millimètres).
- Font size in mm ? : taille des caractères du texte qui sera imprimé (en millimètres).
- Font name ? : police de caractère utilisée (elle doit être à espacement unique, par exemple "ubuntu mono").
- Cutter margin in mm ? : dimensions du fond perdu (en millimètres).
- File name prefix ? : préfixe qui sera visible avant le nom des fichiers (par exemple "Fichier monFichier.txt :").
- File size suffix ? : suffixe qui sera visible après le nom des fichiers indiquant la taille de ceux-ci en anglais ou en français (par exemple "myFile.txt (128 bytes) :" ou "monFichier.txt (128 octets) :").
- Line numbering ? : numérotation des lignes.
- File table title ? : titre de la table des fichiers (si omis, le titre "File table" sera affiché par défaut).
- Color style ? : surlignage en rouge des titres pour plus de visibilité (utile pour une impression couleur).
- Sort option ? : tri manuel de l'ordre d'apparition des fichiers dans le livre (intéressant si le tri alphanumérique par défaut n'est pas souhaité).Si vous avez choisi l'option de tri "m" pour cette dernière question "Sort option ?", le menu "Manual sort :" (tri manuel) s'affiche à l'écran suivi de quelques commandes (détaillées ci-dessous), ainsi que l'arborescence des fichiers qui vont être inclus dans le livre, avec successivement le numéro d'apparition des fichiers et le chemin d'accès, c'est à ce moment que vous pouvez modifier l'ordre du tri. Voici ci-dessous le détail des commandes possibles :Détail des commandes du menu "Manual sort :" :
- e (pour "Exit" ou sortie) permet de sortir du menu et commencer la génération du livre.
- s (pour "Save" ou sauvegarde) permet de sauvegarder l'arborescence de fichiers dans un fichier nommé file.tree.
- l (pour "Load" ou chargement) permet de charger le fichier nommé file.tree contenant l'arborescence de fichiers.
- d (pour "Delete" ou suppression) permet de supprimer le fichier nommé file.tree contenant l'arborescence de fichiers.
Utilisez ces options pour sauvegarder l'arborescence avec la commande "s", la modifier en ouvrant manuellement le fichier file.tree avec un éditeur de texte (comme gedit par exemple). Puis rechargez cette arborescence modifiée avec la commande "l", vous verrez les modifications s'afficher dans le menu "File tree :".Plus bas le menu "File tree :" est affiché, c'est l'arborescence de fichiers :La flèche orientée vers la gauche en suffixe des chemins d'accès aux fichiers indique la position de la destination d'un autre fichier source que vous pouvez choisir de déplacer. Validez pour décaler ce curseur vers une autre destination (c'est-à-dire vers le bas), ou écrivez un nombre, puis validez afin de changer la position dans l'arborescence (l'ordre de tri) du fichier indiqué en source (soit le nombre indiqué) vers la destination (soit le curseur en forme de flèche).Exemple : - Le curseur est positionné sur le fichier numéro 3, c'est la destination.
- J'indique le numéro 10, c'est la source, puis je valide.
- Le fichier en position 10 (la source) prend la position 3 (la destination), et inversement, le 3 prend la position 10.Lorsque l'ordre de tri des fichiers correspond à ce que vous souhaitez, indiquez la commande "e" puis validez pour sortir du menu et débuter la génération du livre.La génération du livre commence alors. Elle prend logiquement un temps proportionnel à la complexité de l'arborescence de fichiers utilisée comme source, ainsi que le nombre de lignes et de caractères dans la programmation et l'encodage de chaque fichiers. Une fois la génération du livre terminée, un fichier PDF nommé book content.pdf est constitué, et les spécifications utiles pour l'impression du livre sont affichées :- Book cover specifications for printing : caractéristiques de la couverture du livre pour l'impression.
- Total lenght (front + side + back) : longueur totale de la couverture (soit la somme des largeurs de la face avant, du dos, et de la face arrière).
- Front width : largeur de la face avant.
- Front height : hauteur de la face avant.
- Side width : largeur du dos.
- Side height : hauteur du dos.
- Back width : largeur de la face arrière.
- Back height : hauteur de la face arrière.
- Book content specifications for printing : caractéristiques du contenu du livre pour l'impression.
- Number of pages : nombre total de pages du contenu du livre.
- Total files size : taille totale des fichiers de votre arborescence faisant partie du contenu, ce qui correspond à la taille totale des fichiers inclus dans le livre, autrement dit, le contenu utile (cette taille exclue donc les titres et la numérotation des pages, de même que la table des fichiers à la toute fin du livre qui n'est là que pour faciliter la navigation dans l'ouvrage final imprimé).Note importante : la largeur du dos du livre est calculée par rapport à un papier de 100g/m².Toutes ces caractéristiques vont vous permettre de créer la couverture du livre manuellement. Dans la continuité, la génération de la couverture aurait pu être également automatisée, mais je pense que c'est contre-artistique, ne laissant plus aucun libre cours à la création et l'imagination. C'est donc un choix mûrement réfléchit de ma part que de laisser la création de la couverture à la charge de l'auteur.Après avoir créé la couverture de votre livre à votre guise, il suffit simplement d'envoyer cette dernière ainsi que le fichier book content.pdf à un imprimeur !Libre à vous de faire une utilisation de ce petit programme de génération automatique de contenu de livre, lorsque vous aurez besoin de sauvegarder vos fichiers sur un autre support que ceux habituellement utilisés dans le monde du numérique !