-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmkepub
executable file
·255 lines (218 loc) · 8.11 KB
/
mkepub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
#!/bin/bash
#set -euf -o pipefail
# Tampilkan pesan dalam huruf tebal dan berwarna merah.
print_err() {
printf '\e[1;31m!! %s\n\e[m' "$*"
}
# Tampilkan pesan dalam huruf berwarna hijau.
print_msg() {
printf '\e[32m:: %s\n\e[m' "$*"
}
# Tampilkan pesan dalam huruf tebal dan berwarna coklat.
print_q() {
printf '\e[1;33m:: %s\n\e[m' "$*"
}
# Periksa paket-paket yang menjadi ketergantungan skrip.
declare -a DEPS=(awk pandoc)
for ((NUM=${#DEPS[@]},i=0; i<NUM;i++)); do
if command -v "${DEPS[i]}" >/dev/null 2>&1 ; then
unset -v 'DEPS[i]'
fi
done
# Hentikan skrip jika paket yeng manjdi ketergantungan tidak ditemukan.
if [[ "${#DEPS[@]}" -gt 0 ]]; then
print_err 'Paket tidak ditemukan'
print_q 'Pasang paket berikut sesuai dengan penata paket yang digunakan:'
printf ' - %s\n' "${DEPS[@]}"
exit 1
fi
# Bantuan penggunaan skrip.
print_help() {
printf '%s\n' "
Skrip ini akan membantu Anda membuat berkas EPUB (buku elektronik) Al Qur'an
disertai terjemah bahasa Indonesia.
Berkas teks Al Qur'an dan terjemah diperoleh dari http://tanzil.net.
Hal berkaitan dengan tipografi Al Qur'an, terjemah dan atau lainnya yang
bukan disebabkan kesalahan skrip ini silakan merujuk ke laman tersebut.
Cara menggunakan: ${0##*/} <PILIHAN>
PILIHAN:
TEKS AL QUR'AN
- s, simple Sederhana
- se, simple-enhanced Sederhana dengan tanda baca dan simbol
- sm, simple-minimal Sederhana dengan sedikit tanda baca dan simbol
- sc, simple-clean Sederhana tanpa tanda baca dan simbol
- u, uthmani Usmani, mushaf Madinah
- um, uthmani-minimal Usmani dengan sedikit tanda baca dan simbol
Jika tidak ada teks Qur'an yang dipilih maka akan menggunakan teks Qur'an
Simple Enhanced.
TERJEMAHAN
- id, indonesian Kementerian Agama Republik Indonesia
- m, muntakhab Muhammad Quraish Shihab
- j, jalalayn Tafsir Jalalayn
Jika tidak ada terjemahan yang dipilih maka akan menyertakan ketiga teks
terjemahan di atas.
HURUF
- me, me_quran me_quran
- pdms _PDMS_Saleem_QuranFont
- sche, scheherazade Scheherazade Regular
- ut KFGQPC Uthman Taha Naskh
Jika tiada huruf yang dipilih maka akan digunakan _PDMS_Saleem_QuranFont
kecuali untuk teks Qur'an Usmani (uthmani dan uthmani-minimal).
Teks Qur'an Usmani akan selalu menggunakan huruf me_quran kecuali
ditentukan lain.
- -h, --help Tampilkan bantuan ini
Jika memberikan lebih dari satu kali tiap entri PILIHAN, maka argumen
terakhirlah yang akan dipakai. Misal menjalankan perintah:
${0##*/} u m sc
Walau telah memasukkan argumen u untuk mushaf Madinah, namun karena kemudian
memberikan juga argumen sc, maka teks Qur'an yang dipakai adalah Simple Clean.
Contoh penggunaan:
- ${0##*/}
Membuat EPUB dengan teks Qur'an Simple Enhanced, huruf PDMS dan semua
terjemah.
- ${0##*/} u
Membuat EPUB dengan teks Qur'an Usmani, huruf me_quran dan semua terjemah.
- ${0##*/} u id
Membuat EPUB dengan teks Qur'an Usmani, huruf me_quran dan terjemah dari
Kementerian Agama Republik Indonesia.
- ${0##*/} u j ut
Membuat EPUB dengan teks Qur'an Usmani, huruf KFGQPC Uthman Taha Naskh
dan terjemah tafsir Jalalayn.
"
exit 0
}
# Pastikan skrip berjalan pada direktori tempat ia dijalankan.
SCRIPTDIR=$(cd "$(dirname "$0")" || exit; pwd)
cd "$SCRIPTDIR" || exit
# Array nama-nama surat.
NAMA_SURAT=( . Al-Fatihah Al-Baqarah Ali-Imran An-Nisaa\' Al-Maaidah \
Al-An\'aam Al-A\'raaf Al-Anfaal At-Taubah Yunus Huud Yusuf Ar-Ra\'d Ibrahim \
Al-Hijr An-Nahl Al-Israa\' Al-Kahfi Maryam Thaahaa Al-Anbiyaa\' Al-Hajj \
Al-Mukminuun An-Nuur Al-Furqaan Ash-Shu\'araa An-Naml Al-Qashash Al-Ankabuut \
Ar-Ruum Luqman As-Sajdah Al-Ahzaab Saba\' Faathir Yasiin As-Shaaffaat Shaad \
Az-Zumar Al-Ghaafir Fushshilat Asy-Syuura Az-Zukhruf Ad-Dukhaan Al-Jaatsiyah \
Al-Ahqaaf Muhammad Al-Fath Al-Hujuraat Qaaf Adz-Dzaariyat Ath-Thur An-Najm \
Al-Qamar Ar-Rahmaan Al-Waaqi\'ah Al-Hadiid Al-Mujaadilah Al-Hasyr \
Al-Mumtahanah Ash-Shaff Al-Jumu\'ah Al-Munaafiquun At-Taghaabuun Ath-Thaalaq \
At-Tahrim Al-Mulk Al-Qalam Al-Haaqqah Al-Ma\'aarij Nuuh Al-Jin Al-Muzzammil \
Al-Muddatstsir Al-Qiyaamah Al-Insaan Al-Mursalaat An-Naba\' \
An-Naazi\'aat \'Abasa At-Takwir Al-Infithaar Al-Mutaffifin Al-Insyiqaaq \
Al-Buruuj Ath-Thaariq Al-A\'laa Al-Ghaashiyah Al-Fajr Al-Balad Asy-Syams \
Al-Lail Ad-Dhuhaa 'Alam Nasyrah' At-Tiin Al-\'Alaq Al-Qadr Al-Bayyinah \
Al-Zalzalah Al-\'Aadiyaat Al-Qaari\'ah At-Takaatsur Al-\'Ashr Al-Humazah \
Al-Fiil Quraisy Al-Maa\'uun Al-Kautsar Al-Kaafiruun An-Nashr Al-Lahab \
Al-Ikhlaas Al-Falaq An-Naas )
# Teks qur'an yang akan digunakan
QURAN='quran-simple-enhanced.txt'
# Huruf qur'an yang akan digunakan
HRFQRN='_PDMS_Saleem_QuranFont.ttf'
# Maksimal 3 argumen
if [[ "$#" -gt 3 ]]; then
print_q 'Skrip hanya menerima maksimal 3 argumen:'
printf ' - %s\n' "1 untuk teks Qur'an" '1 untuk huruf' '1 untuk terjemah'
print_msg "Ketik $0 -h untuk bantuan lebih lanjut."
exit 0
fi
# Telusuri argumen dan abaikan urutannya.
while [[ "$#" -gt 0 ]]; do
case "$1" in
s|simple)
QURAN='quran-simple.txt'
;;
se|simple-enhanced)
QURAN='quran-simple-enhanced.txt'
;;
sm|simple-minimal)
QURAN='quran-simple-min.txt'
;;
sc|simple-clean)
QURAN='quran-simple-clean.txt'
;;
u|uthmani)
QURAN='quran-uthmani.txt'
HRFQRN='me_quran_volt_newmet.ttf'
;;
um|uthmani-minimal)
QURAN='quran-uthmani-min.txt'
HRFQRN='me_quran_volt_newmet.ttf'
;;
id|indonesian)
TRANS='id.indonesian.txt'
;;
m|muntakhab)
TRANS='id.muntakhab.txt'
;;
j|jalalayn)
TRANS='id.jalalayn.txt'
;;
me| me_quran)
HRFQRN='me_quran_volt_newmet.ttf'
;;
pdms)
HRFQRN='_PDMS_Saleem_QuranFont.ttf'
;;
sche|scheherazade)
HRFQRN='Scheherazade-Regular.ttf'
;;
ut)
HRFQRN='UthmanTN1 Ver10.otf'
;;
-h|--help|*)
print_help
;;
esac
shift
done
TMPDIR="$(mktemp -d)"
QMD="$TMPDIR/${QURAN%.*}.md"
MQ="$TMPDIR/merged-${QURAN}"
QEPUB="$SCRIPTDIR/quran.epub"
# Jadikan teks Qur'an sebagai header (<h2>) agar ditampilkan tebal dan besar
# Beri placeholder sementara untuk kemudian diganti tag ##
awk -F\| '{print $1"|"$2"|HEADERH2"$3}' "src/quran/$QURAN" > "$TMPDIR/$QURAN"
print_msg "Menggabungkan teks $QURAN dengan terjemahnya"
if [[ -z ${TRANS+x} ]]; then
print_msg 'Menyertakan semua terjemahan'
# Gabungkan berkas-berkas dengan urutan:
# - ayat Al Qur'an:
# - terjemah Departemen Agama Republik Indonesia
# - terjemah Quraish Shihab
# - tafsir Jalalayn
paste -d '\n' "$TMPDIR/$QURAN" \
"src/translation/id.indonesian.txt" \
"src/translation/id.muntakhab.txt" \
"src/translation/id.jalalayn.txt" > "$MQ"
else
print_msg "Menggunakan terjemahan $TRANS"
paste -d '\n' "$TMPDIR/$QURAN" "src/translation/$TRANS" > "$MQ"
fi
# Escaping backtick so it won't be parsed as code tag
awk -i inplace '{gsub("`", "\\`")};1' "$MQ"
print_msg 'Memilah hasil penggabungan berdasar nomor surat'
for i in {1..114} ; do
# Beri nama surat
printf '%s\n\n' "# ${NAMA_SURAT[$i]}" '-----' >> "$QMD"
# Ambil ayat berdasar nomor
# Ganti format nomor x|x| menjadi x.
# Tambahkan spasi di bawah baris
awk -F\| -v num="^${i}[|][[:alnum:]]" '$0 ~ num {print $2"\\. "$3"\n"}' "$MQ" >> "$QMD"
done
# Hilangkan angka di depan baris ayat Qur'an agar ia dianggap header <h2>
awk -i inplace '/HEADERH2/{gsub("^.+HEADERH2", "## ")};1' "$QMD"
print_msg 'Menyalin quran-epub.css'
cp quran-epub.css "$TMPDIR"
awk -i inplace -v hrfqrn="$HRFQRN" '{gsub("HURUFQURAN", hrfqrn)};1' "$TMPDIR/quran-epub.css"
print_msg 'Membuat berkas EPUB'
pandoc +RTS -K100000000 -RTS \
-f markdown \
-t epub3 \
--toc \
--toc-depth=1 \
--css="$TMPDIR/quran-epub.css" \
--epub-embed-font="src/fonts/$HRFQRN" \
-o "$QEPUB" \
"$SCRIPTDIR/metadata.yaml" \
"$QMD"
print_msg 'Menghapus map sementara'
rm -r "$TMPDIR"
printf '\e[1;32m:: %s\n\e[m' "EPUB Al Qur'an terjemah bahasa Indonesia telah selesai dibuat dan dapat ditemukan di $QEPUB"