diff --git a/SL/ffv b/SL/ffv new file mode 100755 index 0000000..385c1ad --- /dev/null +++ b/SL/ffv @@ -0,0 +1,399 @@ +#!/bin/bash +# https://www.majlovesreg.one/tag/code/ + +[ -r "/home/maj/bin/maj-source" ] && source "/home/maj/bin/maj-source" + +################################################################################ +# Requirements + +[ -x "$(which jq)" ] || errx "Required program not found: jq" 2 +[ -x "$(which getopt)" ] || errx "Required program not found: getopt" 2 +[ -x "$(which ffmpeg)" ] || errx "Required program not found: ffmpeg" 2 +[ -x "$(which ffplay)" ] || errx "Required program not found: ffplay" 2 +[ -x "$(which ffprobe)" ] || errx "Required program not found: ffprobe" 2 +[ -x "$(which convert)" ] || errx "Required program not found: convert" 2 +[ -x "$(which identify)" ] || errx "Required program not found: identify" 2 + +################################################################################ +# Variables + +dir_pwd="${PWD}" +dir_60fps='/home/maj/Videos/SL/Publications/nwt/nwt_sl_60fps' + +lang_tr='SLV' # All CAPS +lang_tr_iso='vi' +lang_iso_default='en' + +fontfile='/home/maj/.fonts/Sans/Noto-Sans-Display/static/NotoSansDisplay-SemiBold.ttf' +fontfile_estimator='/home/maj/.fonts/Sans/Noto-Sans-Display/static/NotoSansDisplay-Regular.ttf' + +ff='ffmpeg' +ff_banner='-hide_banner -loglevel error -stats' +ff_opts_post="-y -c:a copy -c:v libx264 -c:s mov_text -crf 20 -preset slow" + +mpv_opts='--fullscreen=no --keep-open=always --resume-playback=no --save-position-on-quit=no' + +read -r -d '' langs <<- EOF +{ + "ASL": "en", + "BVL": "es", + "SPE": "es", + "SLV": "vi" +} +EOF + +# FFmpeg variables +x=93 # Draw text translation x-axis from top left +y=54 # Draw text translation y-axis from top left +s=34 # Font size +a=0.66 # Transparency of overlay text +a_ll=0.33 # Transparency of source language, set to 0 to hide +drawtext_ll_y_offset=-5 # Offset pixels between reference and source language +offset_end_default=-0.02 # Default cut at end of scripture + +tmpfile_prefix='ff-vi60-verse' + +################################################################################ +# Usage and options + +function usage { + + echo " +Usage: $(basename "${0}") [Additional options] + +Required parameters: + + SL language code Three-letter language code used by jw.org. + If 'ALL' is supplied for language code, the script will + search on which languages the verses are available. + + Bible reference Single-chapter reference in quotation marks + +Optional options: + + -f, --ffmpeg Encode using ffmpeg, otherwise play using ffplay + -m, --mpv Play output video using mpv + + -s, --offset-start ([+]/-)seconds at the start of the video + -e, --offset-end ([+]/-)seconds at the end of the video + -w, --offset-width ([+]/-)pixels for delogo filter text width + + -h, --help Show this help text +" + + exit 1 + +} + +options=$(getopt -o f,m,s:,e:,w:,h -l ffmpeg,mpv,offset-start:,offset-end:,offset-width:,help -n "$(basename ${0})" -- "$@") +[ ${?} -eq 0 ] || usage + +eval set -- "$options" + +while :; do + case "${1}" in + -f|--ffmpeg) encode=true ;; + -m|--mpv) mpv=true ;; + -s|--offset-start) shift; offset_start="${1}" ;; + -e|--offset-end) shift; offset_end="${1}" ;; + -w|--offset-width) shift; offset_overlay="${1}" ;; + -h|--help) usage ;; + --) shift; break ;; + esac + shift +done + +[ -z "${2}" ] && usage + +################################################################################ +# Processed variables + +cd "${dir_60fps}" +langs_available=( $(ls -1d */ | grep -o '[A-Z]\{3\}') ) + +textfile=$(mktemp --tmpdir ${tmpfile_prefix}-XXXXXXXXXX) + +[ -z "${offset_end}" ] && offset_end=${offset_end_default} + +l="${1}" +ll=${l^^} +lang_iso="$(echo ${langs} | jq -r .${ll})" + +b="$(echo ${2} | sed 's/ [0-9]\+:[0-9, -]\+$//')" +b_name="${b^}" + +# Get Bible book number from name +[ "$b" -eq "$b" ] 2>/dev/null || b="$(jq -r '.books | to_entries | map(select(.value[] == "'${b_name}'") | .key)[0]' ${dir_60fps}/nwtsty_${lang_iso_default}.json)" +[ "$b" -eq "$b" ] 2>/dev/null || { + for lll in ${langs_available[@]}; do + lang_iso_lll="$(echo ${langs} | jq -r .${lll})" + b="$(jq -r '.books | to_entries | map(select(.value[] == "'${b_name}'") | .key)[0]' ${dir_60fps}/nwtsty_${lang_iso_lll}.json)" + [ "$b" -eq "$b" ] 2>/dev/null && break + done +} + +[ "$b" -eq "$b" ] 2>/dev/null || errx "Book name not found in ${langs_available[*]}: ${b_name}" 3 + +bb=$(printf "%02d" ${b}) + +c="$(echo ${2} | sed -e 's/^.* \(.*\):.*$/\1/')" +cc=$(printf "%02d" ${c}) + +overlay_book="$(jq -r '.books."'${b}'".standardSingularBookName' ${dir_60fps}/nwtsty_${lang_tr_iso}.json)" + +################################################################################ +# Put the verses into an array + +# https://stackoverflow.com/a/45201229/2756066 +readarray -td '' vss < <(awk '{ gsub(/, /,"\0"); print; }' <<<"$(echo ${2} | sed 's/^.*://'), "); unset 'vss[-1]'; + +for (( n=0; n<${#vss[@]}; n++ )); do + + [ "$(( vss[n] + 1 ))" -eq "$(( vss[n+1] ))" ] 2>/dev/null && { + + vss[n]="${vss[n]}-${vss[n+1]}" + + unset "vss[ $((n+1)) ]" + + vss=("${vss[@]}") + + } + + # echo ${vss[${n}]} + +done + +################################################################################ +# Search in all available SLs + +[ "${ll}" = "ALL" ] && { + + for ll in ${langs_available[@]}; do + + video_file="$(ls ${dir_60fps}/nwt_${ll}-60fps/nwt_${bb}_*_${ll}_${cc}_r720P.mp4 2>/dev/null)" + [ -z "${video_file}" -a "${b}" -eq 19 -a ${c} -lt 100 ] && video_file="$(ls ${dir_60fps}/nwt_${ll}-60fps/nwt_${bb}_*_${ll}_0${cc}_r720P.mp4 2>/dev/null)" # Psalms + [ -z "${video_file}" ] && continue + + for vvv in ${vss[@]}; do + + [ "$vvv" -eq "$vvv" ] 2>/dev/null && { + + v=$vvv + + start_end="$(ffprobe -hide_banner -loglevel quiet -show_chapters -print_format json ${video_file} | \ + jq -r '.chapters[] | select( .tags.title | test(" '${c}':'${v}'($|\r$)") ) | { start_time, end_time }')" + + [ -z "${start_end}" ] && echo-r "❌ ${ll} ${b_name} ${c}:${v}" || echo-g "✅ ${ll} ${b_name} ${c}:${v}" + + } || { + + echo "${vvv}" | grep -q '-' || continue + + for v in $(seq "${vvv%-*}" "${vvv#*-}"); do + + start_end="$(ffprobe -hide_banner -loglevel quiet -show_chapters -print_format json ${video_file} | \ + jq -r '.chapters[] | select( .tags.title | test(" '${c}':'${v}'($|\r$)") ) | { start_time, end_time }')" + + [ -z "${start_end}" ] && echo-r "❌ ${ll} ${b_name} ${c}:${v}" || echo-g "✅ ${ll} ${b_name} ${c}:${v}" + + done + + } + + done + + echo + + done + +################################################################################ +# Else, process verses + +} || { + + cd "${dir_pwd}" + + [ -d "${dir_60fps}/nwt_${ll}-60fps" ] || errx "Language ${ll} not found! Use scripts sl_dl_nwt_info and sl_dl_nwt?" 4 + [ -r "${dir_60fps}/nwtsty_${lang_tr_iso}.json" ] || errx "Translation info not found: ${dir_60fps}/nwtsty_${lang_tr_iso}.json" 7 + + overlay_book_estimator="$(jq -r '.books."'${b}'".standardSingularBookName' ${dir_60fps}/nwtsty_${lang_iso}.json)" + + video_file="$(ls ${dir_60fps}/nwt_${ll}-60fps/nwt_${bb}_*_${ll}_${cc}_r720P.mp4 2>/dev/null)" + [ -z "${video_file}" -a "${b}" -eq 19 -a ${c} -lt 100 ] && video_file="$(ls ${dir_60fps}/nwt_${ll}-60fps/nwt_${bb}_*_${ll}_0${cc}_r720P.mp4 2>/dev/null)" # Psalms + [ -z "${video_file}" ] && errx "${b_name} chapter ${c} not available in ${ll}" 5 || { echo-b "Source video file: '${video_file}'"; echo; } + + for vvv in ${vss[@]}; do + + ############################################################################## + # Get start and end times + + start_time= + end_time= + + filename_output="${dir_pwd}/$(echo $(jq -r '.books."'${b}'".standardSingularBookName' ${dir_60fps}/nwtsty_${lang_iso_default}.json) ${c}:${vvv} - ${ll} - VI60.mp4 | \ + sed 's#[<>:"/\|?*]#_#g')" # Sanitize file names + + # If verse is number, single verse only + [ "$vvv" -eq "$vvv" ] 2>/dev/null && { + + v=${vvv} + + start_end="$(ffprobe -hide_banner -loglevel quiet -show_chapters -print_format json ${video_file} | \ + jq -r '.chapters[] | select( .tags.title | test(" '${c}':'${v}'($|\r$)") ) | { start_time, end_time }')" + # Psalms + [ -z "${start_end}" -a "${b}" -eq 19 -a ${c} -lt 100 ] && start_end="$(ffprobe -hide_banner -loglevel quiet -show_chapters -print_format json ${video_file} | \ + jq -r '.chapters[] | select( .tags.title | test(" 0'${c}':'${v}'($|\r$)") ) | { start_time, end_time }')" + + [ -z "${start_end}" ] && errx "Verse not available in ${ll}." 6 + + start_time="$(echo ${start_end} | jq -r '.start_time')" + end_time="$(echo ${start_end} | jq -r '.end_time')" + + [ -n "${offset_start}" ] && start_time="$(echo ${start_time} + ${offset_start} | bc)" + [ -n "${offset_end}" ] && end_time="$(echo ${end_time} + ${offset_end} | bc)" + + # If multiple verses, (range, contains dash) + } || { + + # Check if it contains a dash, otherwise ignore + echo "${vvv}" | grep -q '-' || continue + + v_start="${vvv%-*}" + v_end="${vvv#*-}" + + start_time=() + end_time=() + + for v in $(seq ${v_start} ${v_end}); do + + start_end="$(ffprobe -hide_banner -loglevel quiet -show_chapters -print_format json ${video_file} | \ + jq -r '.chapters[] | select( .tags.title | test(" '${c}':'${v}'($|\r$)") ) | { start_time, end_time }')" + # Psalms + [ -z "${start_end}" -a "${b}" -eq 19 -a ${c} -lt 100 ] && start_end="$(ffprobe -hide_banner -loglevel quiet -show_chapters -print_format json ${video_file} | \ + jq -r '.chapters[] | select( .tags.title | test(" 0'${c}':'${v}'($|\r$)") ) | { start_time, end_time }')" + + [ -z "${start_end}" ] && continue + + start_time[v]="$(echo ${start_end} | jq -r '.start_time')" + end_time[v]="$(echo ${start_end} | jq -r '.end_time')" + + done + + [ -n "${offset_start}" ] && start_time[v_start]="$(echo ${start_time[v_start]} + ${offset_start} | bc)" + [ -n "${offset_end}" ] && end_time[v_end]="$(echo ${end_time[v_end]} + ${offset_end} | bc)" + + } # END: Get start and end times + + ############################################################################## + # If translation language is the same as input language, cut only + + [ "${ll}" = "${lang_tr}" ] && { + + # Check if array, i.e. single verse + [ "${start_time}" -a "${end_time}" ] || { + start_time=${start_time[v_start]} + end_time=${end_time[v_end]} + } + + [ ! "${encode}" ] && ffplay ${ff_banner} -ss ${start_time} -t $(echo "${end_time} - ${start_time}" | bc) -i "${video_file}" || { + + ffmpeg ${ff_banner} -i "${video_file}" -ss ${start_time} -to ${end_time} ${ff_opts_post} "${filename_output}" && { + + echo + echo-g "Saved video to: '${filename_output}'" + echo + [ "${mpv}" ] && mpv ${mpv_opts} "${filename_output}" + + } + + } + + ############################################################################## + # Translate book name, overlay using delogo and drawtext + + } || { + + imagefile_tr="${textfile}_tr.png" + convert -background none -fill black -font "${fontfile}" -pointsize ${s} label:"${overlay_book} ${c}:${v}" "${imagefile_tr}" + + h_tr=$(identify -format "%h" "${imagefile_tr}") + + drawtext_ll="drawtext=text="${ll}":fontfile="${fontfile}":fontcolor=white:fontsize=${s}:x=$(( x )):y=$(( y + h_tr + drawtext_ll_y_offset )):alpha=${a_ll}" + + # If single verse + [ "${start_time}" -a "${end_time}" ] && { + + echo "${overlay_book} ${c}:${v}" > "${textfile}" + + imagefile_est="${textfile}.png" + convert -background none -fill black -font "${fontfile_estimator}" -pointsize ${s} label:"${overlay_book_estimator} ${c}:${v}" "${imagefile_est}" + + w=$(identify -format "%w" "${imagefile_est}") + h=$(identify -format "%h" "${imagefile_est}") + + delogo="delogo=x=$(( x-5 )):y=$(( y-5 )):w=$(( w + 10 + offset_overlay )):h=$(( h+10 )):show=0," + delogo_show="delogo=x=$(( x-5 )):y=$(( y-5 )):w=$(( w + 10 + offset_overlay )):h=$(( h+10 )):show=1," + + drawtext="drawtext=textfile="${textfile}":fontfile="${fontfile}":fontcolor=white:fontsize=${s}:x=${x}:y=${y}:alpha=${a}," + + # If multiple verses + } || { + + delogo= + delogo_show= + + drawtext= + + for v in $(seq ${v_start} ${v_end}); do + + echo "${overlay_book} ${c}:${v}" > "${textfile}-${v}" + + imagefile_est="${textfile}-${v}.png" + convert -background none -fill black -font "${fontfile_estimator}" -pointsize ${s} label:"${overlay_book_estimator} ${c}:${v}" "${imagefile_est}" + + w=$(identify -format "%w" "${imagefile_est}") + h=$(identify -format "%h" "${imagefile_est}") + + # Extend filters one more frame since it can error out + # On 60 fps one frame is 0.016666667 s + [ "${v}" -eq "${v_end}" ] && filter_end=$(echo "${end_time[v]} + 0.02" | bc) || filter_end=${end_time[v]} + + delogo+="delogo=x=$(( x-5 )):y=$(( y-5 )):w=$(( w + 10 + offset_overlay )):h=$(( h+10 )):show=0:enable='between(t,${start_time[v]},${filter_end})'," + delogo_show+="delogo=x=$(( x-5 )):y=$(( y-5 )):w=$(( w + 10 + offset_overlay )):h=$(( h+10 )):show=1:enable='between(t,${start_time[v]},${filter_end})'," + + drawtext+="drawtext=textfile="${textfile}-${v}":fontfile="${fontfile}":fontcolor=white:fontsize=${s}:x=${x}:y=${y}:alpha=${a}:enable='between(t,${start_time[v]},${filter_end})'," + + done + + } # END: Translate: Get single/multiple verses + + filter_play="${delogo_show}${drawtext}${drawtext_ll}" + filter_encode="${delogo}${drawtext}${drawtext_ll}" + + [ "${start_time}" ] || start_time="${start_time[v_start]}" + [ "${end_time}" ] || end_time="${end_time[v_end]}" + [ "${start_time}" -a "${end_time}" ] || continue + + [ ! "${encode}" ] && ffplay ${ff_banner} -ss ${start_time} -t $(echo "${end_time} - ${start_time}" | bc) -i "${video_file}" -vf "${filter_play}" || { + + ffmpeg ${ff_banner} -i "${video_file}" -ss ${start_time} -to ${end_time} -vf "${filter_encode}" ${ff_opts_post} "${filename_output}" && { + + echo + echo-g "Saved video to: '${filename_output}'" + echo + [ "${mpv}" ] && mpv ${mpv_opts} "${filename_output}" + + } + + } + + } # END: Translation language: cut only or translate reference + + done # END: For each verse group + +} # END: Search (lang=all) or process video from specified language + +################################################################################ +# Cleanup + +rm "$(dirname $(mktemp -u --tmpdir))/${tmpfile_prefix}-"* diff --git a/SL/ffv_files/nwtsty_en.json b/SL/ffv_files/nwtsty_en.json new file mode 100644 index 0000000..bcdce8a --- /dev/null +++ b/SL/ffv_files/nwtsty_en.json @@ -0,0 +1,867 @@ +{ + "locale": "en", + "bookCount": "66", + "vernacularFullName": "Study Bible (nwtsty)", + "vernacularAbbreviation": "NWT-en-nwtsty", + "titleFormat": "%s | The New World Translation (Study Edition) | NWT Study Bible", + "books": { + "1": { + "chapterCount": "50", + "standardName": "Genesis", + "standardAbbreviation": "Gen.", + "officialAbbreviation": "Ge", + "standardSingularBookName": "Genesis", + "standardSingularAbbreviation": "Gen.", + "officialSingularAbbreviation": "Ge", + "standardPluralBookName": "Genesis", + "standardPluralAbbreviation": "Gen.", + "officialPluralAbbreviation": "Ge", + "bookDisplayTitle": "The Book of Genesis" + }, + "2": { + "chapterCount": "40", + "standardName": "Exodus", + "standardAbbreviation": "Ex.", + "officialAbbreviation": "Ex", + "standardSingularBookName": "Exodus", + "standardSingularAbbreviation": "Ex.", + "officialSingularAbbreviation": "Ex", + "standardPluralBookName": "Exodus", + "standardPluralAbbreviation": "Ex.", + "officialPluralAbbreviation": "Ex", + "bookDisplayTitle": "The Book of Exodus" + }, + "3": { + "chapterCount": "27", + "standardName": "Leviticus", + "standardAbbreviation": "Lev.", + "officialAbbreviation": "Le", + "standardSingularBookName": "Leviticus", + "standardSingularAbbreviation": "Lev.", + "officialSingularAbbreviation": "Le", + "standardPluralBookName": "Leviticus", + "standardPluralAbbreviation": "Lev.", + "officialPluralAbbreviation": "Le", + "bookDisplayTitle": "The Book of Leviticus" + }, + "4": { + "chapterCount": "36", + "standardName": "Numbers", + "standardAbbreviation": "Num.", + "officialAbbreviation": "Nu", + "standardSingularBookName": "Numbers", + "standardSingularAbbreviation": "Num.", + "officialSingularAbbreviation": "Nu", + "standardPluralBookName": "Numbers", + "standardPluralAbbreviation": "Num.", + "officialPluralAbbreviation": "Nu", + "bookDisplayTitle": "The Book of Numbers" + }, + "5": { + "chapterCount": "34", + "standardName": "Deuteronomy", + "standardAbbreviation": "Deut.", + "officialAbbreviation": "De", + "standardSingularBookName": "Deuteronomy", + "standardSingularAbbreviation": "Deut.", + "officialSingularAbbreviation": "De", + "standardPluralBookName": "Deuteronomy", + "standardPluralAbbreviation": "Deut.", + "officialPluralAbbreviation": "De", + "bookDisplayTitle": "The Book of Deuteronomy" + }, + "6": { + "chapterCount": "24", + "standardName": "Joshua", + "standardAbbreviation": "Josh.", + "officialAbbreviation": "Jos", + "standardSingularBookName": "Joshua", + "standardSingularAbbreviation": "Josh.", + "officialSingularAbbreviation": "Jos", + "standardPluralBookName": "Joshua", + "standardPluralAbbreviation": "Josh.", + "officialPluralAbbreviation": "Jos", + "bookDisplayTitle": "The Book of Joshua" + }, + "7": { + "chapterCount": "21", + "standardName": "Judges", + "standardAbbreviation": "Judg.", + "officialAbbreviation": "Jg", + "standardSingularBookName": "Judges", + "standardSingularAbbreviation": "Judg.", + "officialSingularAbbreviation": "Jg", + "standardPluralBookName": "Judges", + "standardPluralAbbreviation": "Judg.", + "officialPluralAbbreviation": "Jg", + "bookDisplayTitle": "The Book of Judges" + }, + "8": { + "chapterCount": "4", + "standardName": "Ruth", + "standardAbbreviation": "Ruth", + "officialAbbreviation": "Ru", + "standardSingularBookName": "Ruth", + "standardSingularAbbreviation": "Ruth", + "officialSingularAbbreviation": "Ru", + "standardPluralBookName": "Ruth", + "standardPluralAbbreviation": "Ruth", + "officialPluralAbbreviation": "Ru", + "bookDisplayTitle": "The Book of Ruth" + }, + "9": { + "chapterCount": "31", + "standardName": "1 Samuel", + "standardAbbreviation": "1 Sam.", + "officialAbbreviation": "1Sa", + "standardSingularBookName": "1 Samuel", + "standardSingularAbbreviation": "1 Sam.", + "officialSingularAbbreviation": "1Sa", + "standardPluralBookName": "1 Samuel", + "standardPluralAbbreviation": "1 Sam.", + "officialPluralAbbreviation": "1Sa", + "bookDisplayTitle": "The First Book of Samuel" + }, + "10": { + "chapterCount": "24", + "standardName": "2 Samuel", + "standardAbbreviation": "2 Sam.", + "officialAbbreviation": "2Sa", + "standardSingularBookName": "2 Samuel", + "standardSingularAbbreviation": "2 Sam.", + "officialSingularAbbreviation": "2Sa", + "standardPluralBookName": "2 Samuel", + "standardPluralAbbreviation": "2 Sam.", + "officialPluralAbbreviation": "2Sa", + "bookDisplayTitle": "The Second Book of Samuel" + }, + "11": { + "chapterCount": "22", + "standardName": "1 Kings", + "standardAbbreviation": "1 Ki.", + "officialAbbreviation": "1Ki", + "standardSingularBookName": "1 Kings", + "standardSingularAbbreviation": "1 Ki.", + "officialSingularAbbreviation": "1Ki", + "standardPluralBookName": "1 Kings", + "standardPluralAbbreviation": "1 Ki.", + "officialPluralAbbreviation": "1Ki", + "bookDisplayTitle": "The First Book of Kings" + }, + "12": { + "chapterCount": "25", + "standardName": "2 Kings", + "standardAbbreviation": "2 Ki.", + "officialAbbreviation": "2Ki", + "standardSingularBookName": "2 Kings", + "standardSingularAbbreviation": "2 Ki.", + "officialSingularAbbreviation": "2Ki", + "standardPluralBookName": "2 Kings", + "standardPluralAbbreviation": "2 Ki.", + "officialPluralAbbreviation": "2Ki", + "bookDisplayTitle": "The Second Book of Kings" + }, + "13": { + "chapterCount": "29", + "standardName": "1 Chronicles", + "standardAbbreviation": "1 Chron.", + "officialAbbreviation": "1Ch", + "standardSingularBookName": "1 Chronicles", + "standardSingularAbbreviation": "1 Chron.", + "officialSingularAbbreviation": "1Ch", + "standardPluralBookName": "1 Chronicles", + "standardPluralAbbreviation": "1 Chron.", + "officialPluralAbbreviation": "1Ch", + "bookDisplayTitle": "The First Book of Chronicles" + }, + "14": { + "chapterCount": "36", + "standardName": "2 Chronicles", + "standardAbbreviation": "2 Chron.", + "officialAbbreviation": "2Ch", + "standardSingularBookName": "2 Chronicles", + "standardSingularAbbreviation": "2 Chron.", + "officialSingularAbbreviation": "2Ch", + "standardPluralBookName": "2 Chronicles", + "standardPluralAbbreviation": "2 Chron.", + "officialPluralAbbreviation": "2Ch", + "bookDisplayTitle": "The Second Book of Chronicles" + }, + "15": { + "chapterCount": "10", + "standardName": "Ezra", + "standardAbbreviation": "Ezra", + "officialAbbreviation": "Ezr", + "standardSingularBookName": "Ezra", + "standardSingularAbbreviation": "Ezra", + "officialSingularAbbreviation": "Ezr", + "standardPluralBookName": "Ezra", + "standardPluralAbbreviation": "Ezra", + "officialPluralAbbreviation": "Ezr", + "bookDisplayTitle": "The Book of Ezra" + }, + "16": { + "chapterCount": "13", + "standardName": "Nehemiah", + "standardAbbreviation": "Neh.", + "officialAbbreviation": "Ne", + "standardSingularBookName": "Nehemiah", + "standardSingularAbbreviation": "Neh.", + "officialSingularAbbreviation": "Ne", + "standardPluralBookName": "Nehemiah", + "standardPluralAbbreviation": "Neh.", + "officialPluralAbbreviation": "Ne", + "bookDisplayTitle": "The Book of Nehemiah" + }, + "17": { + "chapterCount": "10", + "standardName": "Esther", + "standardAbbreviation": "Esther", + "officialAbbreviation": "Es", + "standardSingularBookName": "Esther", + "standardSingularAbbreviation": "Esther", + "officialSingularAbbreviation": "Es", + "standardPluralBookName": "Esther", + "standardPluralAbbreviation": "Esther", + "officialPluralAbbreviation": "Es", + "bookDisplayTitle": "The Book of Esther" + }, + "18": { + "chapterCount": "42", + "standardName": "Job", + "standardAbbreviation": "Job", + "officialAbbreviation": "Job", + "standardSingularBookName": "Job", + "standardSingularAbbreviation": "Job", + "officialSingularAbbreviation": "Job", + "standardPluralBookName": "Job", + "standardPluralAbbreviation": "Job", + "officialPluralAbbreviation": "Job", + "bookDisplayTitle": "The Book of Job" + }, + "19": { + "chapterCount": "150", + "standardName": "Psalms", + "standardAbbreviation": "Ps.", + "officialAbbreviation": "Ps", + "standardSingularBookName": "Psalm", + "standardSingularAbbreviation": "Ps.", + "officialSingularAbbreviation": "Ps", + "standardPluralBookName": "Psalms", + "standardPluralAbbreviation": "Pss.", + "officialPluralAbbreviation": "Pss", + "bookDisplayTitle": "The Book of Psalms" + }, + "20": { + "chapterCount": "31", + "standardName": "Proverbs", + "standardAbbreviation": "Prov.", + "officialAbbreviation": "Pr", + "standardSingularBookName": "Proverbs", + "standardSingularAbbreviation": "Prov.", + "officialSingularAbbreviation": "Pr", + "standardPluralBookName": "Proverbs", + "standardPluralAbbreviation": "Prov.", + "officialPluralAbbreviation": "Pr", + "bookDisplayTitle": "The Book of Proverbs" + }, + "21": { + "chapterCount": "12", + "standardName": "Ecclesiastes", + "standardAbbreviation": "Eccl.", + "officialAbbreviation": "Ec", + "standardSingularBookName": "Ecclesiastes", + "standardSingularAbbreviation": "Eccl.", + "officialSingularAbbreviation": "Ec", + "standardPluralBookName": "Ecclesiastes", + "standardPluralAbbreviation": "Eccl.", + "officialPluralAbbreviation": "Ec", + "bookDisplayTitle": "The Book of Ecclesiastes" + }, + "22": { + "chapterCount": "8", + "standardName": "Song of Solomon", + "standardAbbreviation": "Song of Sol.", + "officialAbbreviation": "Ca", + "standardSingularBookName": "Song of Solomon", + "standardSingularAbbreviation": "Song of Sol.", + "officialSingularAbbreviation": "Ca", + "standardPluralBookName": "Song of Solomon", + "standardPluralAbbreviation": "Song of Sol.", + "officialPluralAbbreviation": "Ca", + "bookDisplayTitle": "The Song of Solomon" + }, + "23": { + "chapterCount": "66", + "standardName": "Isaiah", + "standardAbbreviation": "Isa.", + "officialAbbreviation": "Isa", + "standardSingularBookName": "Isaiah", + "standardSingularAbbreviation": "Isa.", + "officialSingularAbbreviation": "Isa", + "standardPluralBookName": "Isaiah", + "standardPluralAbbreviation": "Isa.", + "officialPluralAbbreviation": "Isa", + "bookDisplayTitle": "The Book of Isaiah" + }, + "24": { + "chapterCount": "52", + "standardName": "Jeremiah", + "standardAbbreviation": "Jer.", + "officialAbbreviation": "Jer", + "standardSingularBookName": "Jeremiah", + "standardSingularAbbreviation": "Jer.", + "officialSingularAbbreviation": "Jer", + "standardPluralBookName": "Jeremiah", + "standardPluralAbbreviation": "Jer.", + "officialPluralAbbreviation": "Jer", + "bookDisplayTitle": "The Book of Jeremiah" + }, + "25": { + "chapterCount": "5", + "standardName": "Lamentations", + "standardAbbreviation": "Lam.", + "officialAbbreviation": "La", + "standardSingularBookName": "Lamentations", + "standardSingularAbbreviation": "Lam.", + "officialSingularAbbreviation": "La", + "standardPluralBookName": "Lamentations", + "standardPluralAbbreviation": "Lam.", + "officialPluralAbbreviation": "La", + "bookDisplayTitle": "The Book of Lamentations" + }, + "26": { + "chapterCount": "48", + "standardName": "Ezekiel", + "standardAbbreviation": "Ezek.", + "officialAbbreviation": "Eze", + "standardSingularBookName": "Ezekiel", + "standardSingularAbbreviation": "Ezek.", + "officialSingularAbbreviation": "Eze", + "standardPluralBookName": "Ezekiel", + "standardPluralAbbreviation": "Ezek.", + "officialPluralAbbreviation": "Eze", + "bookDisplayTitle": "The Book of Ezekiel" + }, + "27": { + "chapterCount": "12", + "standardName": "Daniel", + "standardAbbreviation": "Dan.", + "officialAbbreviation": "Da", + "standardSingularBookName": "Daniel", + "standardSingularAbbreviation": "Dan.", + "officialSingularAbbreviation": "Da", + "standardPluralBookName": "Daniel", + "standardPluralAbbreviation": "Dan.", + "officialPluralAbbreviation": "Da", + "bookDisplayTitle": "The Book of Daniel" + }, + "28": { + "chapterCount": "14", + "standardName": "Hosea", + "standardAbbreviation": "Hos.", + "officialAbbreviation": "Ho", + "standardSingularBookName": "Hosea", + "standardSingularAbbreviation": "Hos.", + "officialSingularAbbreviation": "Ho", + "standardPluralBookName": "Hosea", + "standardPluralAbbreviation": "Hos.", + "officialPluralAbbreviation": "Ho", + "bookDisplayTitle": "The Book of Hosea" + }, + "29": { + "chapterCount": "3", + "standardName": "Joel", + "standardAbbreviation": "Joel", + "officialAbbreviation": "Joe", + "standardSingularBookName": "Joel", + "standardSingularAbbreviation": "Joel", + "officialSingularAbbreviation": "Joe", + "standardPluralBookName": "Joel", + "standardPluralAbbreviation": "Joel", + "officialPluralAbbreviation": "Joe", + "bookDisplayTitle": "The Book of Joel" + }, + "30": { + "chapterCount": "9", + "standardName": "Amos", + "standardAbbreviation": "Amos", + "officialAbbreviation": "Am", + "standardSingularBookName": "Amos", + "standardSingularAbbreviation": "Amos", + "officialSingularAbbreviation": "Am", + "standardPluralBookName": "Amos", + "standardPluralAbbreviation": "Amos", + "officialPluralAbbreviation": "Am", + "bookDisplayTitle": "The Book of Amos" + }, + "31": { + "chapterCount": "1", + "standardName": "Obadiah", + "standardAbbreviation": "Obad.", + "officialAbbreviation": "Ob", + "standardSingularBookName": "Obadiah", + "standardSingularAbbreviation": "Obad.", + "officialSingularAbbreviation": "Ob", + "standardPluralBookName": "Obadiah", + "standardPluralAbbreviation": "Obad.", + "officialPluralAbbreviation": "Ob", + "bookDisplayTitle": "The Book of Obadiah" + }, + "32": { + "chapterCount": "4", + "standardName": "Jonah", + "standardAbbreviation": "Jonah", + "officialAbbreviation": "Jon", + "standardSingularBookName": "Jonah", + "standardSingularAbbreviation": "Jonah", + "officialSingularAbbreviation": "Jon", + "standardPluralBookName": "Jonah", + "standardPluralAbbreviation": "Jonah", + "officialPluralAbbreviation": "Jon", + "bookDisplayTitle": "The Book of Jonah" + }, + "33": { + "chapterCount": "7", + "standardName": "Micah", + "standardAbbreviation": "Mic.", + "officialAbbreviation": "Mic", + "standardSingularBookName": "Micah", + "standardSingularAbbreviation": "Mic.", + "officialSingularAbbreviation": "Mic", + "standardPluralBookName": "Micah", + "standardPluralAbbreviation": "Mic.", + "officialPluralAbbreviation": "Mic", + "bookDisplayTitle": "The Book of Micah" + }, + "34": { + "chapterCount": "3", + "standardName": "Nahum", + "standardAbbreviation": "Nah.", + "officialAbbreviation": "Na", + "standardSingularBookName": "Nahum", + "standardSingularAbbreviation": "Nah.", + "officialSingularAbbreviation": "Na", + "standardPluralBookName": "Nahum", + "standardPluralAbbreviation": "Nah.", + "officialPluralAbbreviation": "Na", + "bookDisplayTitle": "The Book of Nahum" + }, + "35": { + "chapterCount": "3", + "standardName": "Habakkuk", + "standardAbbreviation": "Hab.", + "officialAbbreviation": "Hab", + "standardSingularBookName": "Habakkuk", + "standardSingularAbbreviation": "Hab.", + "officialSingularAbbreviation": "Hab", + "standardPluralBookName": "Habakkuk", + "standardPluralAbbreviation": "Hab.", + "officialPluralAbbreviation": "Hab", + "bookDisplayTitle": "The Book of Habakkuk" + }, + "36": { + "chapterCount": "3", + "standardName": "Zephaniah", + "standardAbbreviation": "Zeph.", + "officialAbbreviation": "Zep", + "standardSingularBookName": "Zephaniah", + "standardSingularAbbreviation": "Zeph.", + "officialSingularAbbreviation": "Zep", + "standardPluralBookName": "Zephaniah", + "standardPluralAbbreviation": "Zeph.", + "officialPluralAbbreviation": "Zep", + "bookDisplayTitle": "The Book of Zephaniah" + }, + "37": { + "chapterCount": "2", + "standardName": "Haggai", + "standardAbbreviation": "Hag.", + "officialAbbreviation": "Hag", + "standardSingularBookName": "Haggai", + "standardSingularAbbreviation": "Hag.", + "officialSingularAbbreviation": "Hag", + "standardPluralBookName": "Haggai", + "standardPluralAbbreviation": "Hag.", + "officialPluralAbbreviation": "Hag", + "bookDisplayTitle": "The Book of Haggai" + }, + "38": { + "chapterCount": "14", + "standardName": "Zechariah", + "standardAbbreviation": "Zech.", + "officialAbbreviation": "Zec", + "standardSingularBookName": "Zechariah", + "standardSingularAbbreviation": "Zech.", + "officialSingularAbbreviation": "Zec", + "standardPluralBookName": "Zechariah", + "standardPluralAbbreviation": "Zech.", + "officialPluralAbbreviation": "Zec", + "bookDisplayTitle": "The Book of Zechariah" + }, + "39": { + "chapterCount": "4", + "standardName": "Malachi", + "standardAbbreviation": "Mal.", + "officialAbbreviation": "Mal", + "standardSingularBookName": "Malachi", + "standardSingularAbbreviation": "Mal.", + "officialSingularAbbreviation": "Mal", + "standardPluralBookName": "Malachi", + "standardPluralAbbreviation": "Mal.", + "officialPluralAbbreviation": "Mal", + "bookDisplayTitle": "The Book of Malachi" + }, + "40": { + "chapterCount": "28", + "standardName": "Matthew", + "standardAbbreviation": "Matt.", + "officialAbbreviation": "Mt", + "standardSingularBookName": "Matthew", + "standardSingularAbbreviation": "Matt.", + "officialSingularAbbreviation": "Mt", + "standardPluralBookName": "Matthew", + "standardPluralAbbreviation": "Matt.", + "officialPluralAbbreviation": "Mt", + "bookDisplayTitle": "The Good News According to Matthew" + }, + "41": { + "chapterCount": "16", + "standardName": "Mark", + "standardAbbreviation": "Mark", + "officialAbbreviation": "Mr", + "standardSingularBookName": "Mark", + "standardSingularAbbreviation": "Mark", + "officialSingularAbbreviation": "Mr", + "standardPluralBookName": "Mark", + "standardPluralAbbreviation": "Mark", + "officialPluralAbbreviation": "Mr", + "bookDisplayTitle": "The Good News According to Mark" + }, + "42": { + "chapterCount": "24", + "standardName": "Luke", + "standardAbbreviation": "Luke", + "officialAbbreviation": "Lu", + "standardSingularBookName": "Luke", + "standardSingularAbbreviation": "Luke", + "officialSingularAbbreviation": "Lu", + "standardPluralBookName": "Luke", + "standardPluralAbbreviation": "Luke", + "officialPluralAbbreviation": "Lu", + "bookDisplayTitle": "The Good News According to Luke" + }, + "43": { + "chapterCount": "21", + "standardName": "John", + "standardAbbreviation": "John", + "officialAbbreviation": "Joh", + "standardSingularBookName": "John", + "standardSingularAbbreviation": "John", + "officialSingularAbbreviation": "Joh", + "standardPluralBookName": "John", + "standardPluralAbbreviation": "John", + "officialPluralAbbreviation": "Joh", + "bookDisplayTitle": "The Good News According to John" + }, + "44": { + "chapterCount": "28", + "standardName": "Acts", + "standardAbbreviation": "Acts", + "officialAbbreviation": "Ac", + "standardSingularBookName": "Acts", + "standardSingularAbbreviation": "Acts", + "officialSingularAbbreviation": "Ac", + "standardPluralBookName": "Acts", + "standardPluralAbbreviation": "Acts", + "officialPluralAbbreviation": "Ac", + "bookDisplayTitle": "Acts of Apostles" + }, + "45": { + "chapterCount": "16", + "standardName": "Romans", + "standardAbbreviation": "Rom.", + "officialAbbreviation": "Ro", + "standardSingularBookName": "Romans", + "standardSingularAbbreviation": "Rom.", + "officialSingularAbbreviation": "Ro", + "standardPluralBookName": "Romans", + "standardPluralAbbreviation": "Rom.", + "officialPluralAbbreviation": "Ro", + "bookDisplayTitle": "The Letter to the Romans" + }, + "46": { + "chapterCount": "16", + "standardName": "1 Corinthians", + "standardAbbreviation": "1 Cor.", + "officialAbbreviation": "1Co", + "standardSingularBookName": "1 Corinthians", + "standardSingularAbbreviation": "1 Cor.", + "officialSingularAbbreviation": "1Co", + "standardPluralBookName": "1 Corinthians", + "standardPluralAbbreviation": "1 Cor.", + "officialPluralAbbreviation": "1Co", + "bookDisplayTitle": "The First Letter to the Corinthians" + }, + "47": { + "chapterCount": "13", + "standardName": "2 Corinthians", + "standardAbbreviation": "2 Cor.", + "officialAbbreviation": "2Co", + "standardSingularBookName": "2 Corinthians", + "standardSingularAbbreviation": "2 Cor.", + "officialSingularAbbreviation": "2Co", + "standardPluralBookName": "2 Corinthians", + "standardPluralAbbreviation": "2 Cor.", + "officialPluralAbbreviation": "2Co", + "bookDisplayTitle": "The Second Letter to the Corinthians" + }, + "48": { + "chapterCount": "6", + "standardName": "Galatians", + "standardAbbreviation": "Gal.", + "officialAbbreviation": "Ga", + "standardSingularBookName": "Galatians", + "standardSingularAbbreviation": "Gal.", + "officialSingularAbbreviation": "Ga", + "standardPluralBookName": "Galatians", + "standardPluralAbbreviation": "Gal.", + "officialPluralAbbreviation": "Ga", + "bookDisplayTitle": "The Letter to the Galatians" + }, + "49": { + "chapterCount": "6", + "standardName": "Ephesians", + "standardAbbreviation": "Eph.", + "officialAbbreviation": "Eph", + "standardSingularBookName": "Ephesians", + "standardSingularAbbreviation": "Eph.", + "officialSingularAbbreviation": "Eph", + "standardPluralBookName": "Ephesians", + "standardPluralAbbreviation": "Eph.", + "officialPluralAbbreviation": "Eph", + "bookDisplayTitle": "The Letter to the Ephesians" + }, + "50": { + "chapterCount": "4", + "standardName": "Philippians", + "standardAbbreviation": "Phil.", + "officialAbbreviation": "Php", + "standardSingularBookName": "Philippians", + "standardSingularAbbreviation": "Phil.", + "officialSingularAbbreviation": "Php", + "standardPluralBookName": "Philippians", + "standardPluralAbbreviation": "Phil.", + "officialPluralAbbreviation": "Php", + "bookDisplayTitle": "The Letter to the Philippians" + }, + "51": { + "chapterCount": "4", + "standardName": "Colossians", + "standardAbbreviation": "Col.", + "officialAbbreviation": "Col", + "standardSingularBookName": "Colossians", + "standardSingularAbbreviation": "Col.", + "officialSingularAbbreviation": "Col", + "standardPluralBookName": "Colossians", + "standardPluralAbbreviation": "Col.", + "officialPluralAbbreviation": "Col", + "bookDisplayTitle": "The Letter to the Colossians" + }, + "52": { + "chapterCount": "5", + "standardName": "1 Thessalonians", + "standardAbbreviation": "1 Thess.", + "officialAbbreviation": "1Th", + "standardSingularBookName": "1 Thessalonians", + "standardSingularAbbreviation": "1 Thess.", + "officialSingularAbbreviation": "1Th", + "standardPluralBookName": "1 Thessalonians", + "standardPluralAbbreviation": "1 Thess.", + "officialPluralAbbreviation": "1Th", + "bookDisplayTitle": "The First Letter to the Thessalonians" + }, + "53": { + "chapterCount": "3", + "standardName": "2 Thessalonians", + "standardAbbreviation": "2 Thess.", + "officialAbbreviation": "2Th", + "standardSingularBookName": "2 Thessalonians", + "standardSingularAbbreviation": "2 Thess.", + "officialSingularAbbreviation": "2Th", + "standardPluralBookName": "2 Thessalonians", + "standardPluralAbbreviation": "2 Thess.", + "officialPluralAbbreviation": "2Th", + "bookDisplayTitle": "The Second Letter to the Thessalonians" + }, + "54": { + "chapterCount": "6", + "standardName": "1 Timothy", + "standardAbbreviation": "1 Tim.", + "officialAbbreviation": "1Ti", + "standardSingularBookName": "1 Timothy", + "standardSingularAbbreviation": "1 Tim.", + "officialSingularAbbreviation": "1Ti", + "standardPluralBookName": "1 Timothy", + "standardPluralAbbreviation": "1 Tim.", + "officialPluralAbbreviation": "1Ti", + "bookDisplayTitle": "The First Letter to Timothy" + }, + "55": { + "chapterCount": "4", + "standardName": "2 Timothy", + "standardAbbreviation": "2 Tim.", + "officialAbbreviation": "2Ti", + "standardSingularBookName": "2 Timothy", + "standardSingularAbbreviation": "2 Tim.", + "officialSingularAbbreviation": "2Ti", + "standardPluralBookName": "2 Timothy", + "standardPluralAbbreviation": "2 Tim.", + "officialPluralAbbreviation": "2Ti", + "bookDisplayTitle": "The Second Letter to Timothy" + }, + "56": { + "chapterCount": "3", + "standardName": "Titus", + "standardAbbreviation": "Titus", + "officialAbbreviation": "Tit", + "standardSingularBookName": "Titus", + "standardSingularAbbreviation": "Titus", + "officialSingularAbbreviation": "Tit", + "standardPluralBookName": "Titus", + "standardPluralAbbreviation": "Titus", + "officialPluralAbbreviation": "Tit", + "bookDisplayTitle": "The Letter to Titus" + }, + "57": { + "chapterCount": "1", + "standardName": "Philemon", + "standardAbbreviation": "Philem.", + "officialAbbreviation": "Phm", + "standardSingularBookName": "Philemon", + "standardSingularAbbreviation": "Philem.", + "officialSingularAbbreviation": "Phm", + "standardPluralBookName": "Philemon", + "standardPluralAbbreviation": "Philem.", + "officialPluralAbbreviation": "Phm", + "bookDisplayTitle": "The Letter to Philemon" + }, + "58": { + "chapterCount": "13", + "standardName": "Hebrews", + "standardAbbreviation": "Heb.", + "officialAbbreviation": "Heb", + "standardSingularBookName": "Hebrews", + "standardSingularAbbreviation": "Heb.", + "officialSingularAbbreviation": "Heb", + "standardPluralBookName": "Hebrews", + "standardPluralAbbreviation": "Heb.", + "officialPluralAbbreviation": "Heb", + "bookDisplayTitle": "The Letter to the Hebrews" + }, + "59": { + "chapterCount": "5", + "standardName": "James", + "standardAbbreviation": "Jas.", + "officialAbbreviation": "Jas", + "standardSingularBookName": "James", + "standardSingularAbbreviation": "Jas.", + "officialSingularAbbreviation": "Jas", + "standardPluralBookName": "James", + "standardPluralAbbreviation": "Jas.", + "officialPluralAbbreviation": "Jas", + "bookDisplayTitle": "The Letter of James" + }, + "60": { + "chapterCount": "5", + "standardName": "1 Peter", + "standardAbbreviation": "1 Pet.", + "officialAbbreviation": "1Pe", + "standardSingularBookName": "1 Peter", + "standardSingularAbbreviation": "1 Pet.", + "officialSingularAbbreviation": "1Pe", + "standardPluralBookName": "1 Peter", + "standardPluralAbbreviation": "1 Pet.", + "officialPluralAbbreviation": "1Pe", + "bookDisplayTitle": "The First Letter of Peter" + }, + "61": { + "chapterCount": "3", + "standardName": "2 Peter", + "standardAbbreviation": "2 Pet.", + "officialAbbreviation": "2Pe", + "standardSingularBookName": "2 Peter", + "standardSingularAbbreviation": "2 Pet.", + "officialSingularAbbreviation": "2Pe", + "standardPluralBookName": "2 Peter", + "standardPluralAbbreviation": "2 Pet.", + "officialPluralAbbreviation": "2Pe", + "bookDisplayTitle": "The Second Letter of Peter" + }, + "62": { + "chapterCount": "5", + "standardName": "1 John", + "standardAbbreviation": "1 John", + "officialAbbreviation": "1Jo", + "standardSingularBookName": "1 John", + "standardSingularAbbreviation": "1 John", + "officialSingularAbbreviation": "1Jo", + "standardPluralBookName": "1 John", + "standardPluralAbbreviation": "1 John", + "officialPluralAbbreviation": "1Jo", + "bookDisplayTitle": "The First Letter of John" + }, + "63": { + "chapterCount": "1", + "standardName": "2 John", + "standardAbbreviation": "2 John", + "officialAbbreviation": "2Jo", + "standardSingularBookName": "2 John", + "standardSingularAbbreviation": "2 John", + "officialSingularAbbreviation": "2Jo", + "standardPluralBookName": "2 John", + "standardPluralAbbreviation": "2 John", + "officialPluralAbbreviation": "2Jo", + "bookDisplayTitle": "The Second Letter of John" + }, + "64": { + "chapterCount": "1", + "standardName": "3 John", + "standardAbbreviation": "3 John", + "officialAbbreviation": "3Jo", + "standardSingularBookName": "3 John", + "standardSingularAbbreviation": "3 John", + "officialSingularAbbreviation": "3Jo", + "standardPluralBookName": "3 John", + "standardPluralAbbreviation": "3 John", + "officialPluralAbbreviation": "3Jo", + "bookDisplayTitle": "The Third Letter of John" + }, + "65": { + "chapterCount": "1", + "standardName": "Jude", + "standardAbbreviation": "Jude", + "officialAbbreviation": "Jude", + "standardSingularBookName": "Jude", + "standardSingularAbbreviation": "Jude", + "officialSingularAbbreviation": "Jude", + "standardPluralBookName": "Jude", + "standardPluralAbbreviation": "Jude", + "officialPluralAbbreviation": "Jude", + "bookDisplayTitle": "The Letter of Jude" + }, + "66": { + "chapterCount": "22", + "standardName": "Revelation", + "standardAbbreviation": "Rev.", + "officialAbbreviation": "Re", + "standardSingularBookName": "Revelation", + "standardSingularAbbreviation": "Rev.", + "officialSingularAbbreviation": "Re", + "standardPluralBookName": "Revelation", + "standardPluralAbbreviation": "Rev.", + "officialPluralAbbreviation": "Re", + "bookDisplayTitle": "The Book of Revelation" + } + } +} diff --git a/SL/ffv_files/nwtsty_es.json b/SL/ffv_files/nwtsty_es.json new file mode 100644 index 0000000..c4ae689 --- /dev/null +++ b/SL/ffv_files/nwtsty_es.json @@ -0,0 +1,867 @@ +{ + "locale": "es", + "bookCount": "66", + "vernacularFullName": "Biblia de estudio (nwtsty)", + "vernacularAbbreviation": "NWT-es-nwtsty", + "titleFormat": "%s | Traducción del Nuevo Mundo (edición de estudio) | TNM Biblia de estudio", + "books": { + "1": { + "chapterCount": "50", + "standardName": "Génesis", + "standardAbbreviation": "Gén.", + "officialAbbreviation": "Gé", + "standardSingularBookName": "Génesis", + "standardSingularAbbreviation": "Gén.", + "officialSingularAbbreviation": "Gé", + "standardPluralBookName": "Génesis", + "standardPluralAbbreviation": "Gén.", + "officialPluralAbbreviation": "Gé", + "bookDisplayTitle": "El libro de Génesis" + }, + "2": { + "chapterCount": "40", + "standardName": "Éxodo", + "standardAbbreviation": "Éx.", + "officialAbbreviation": "Éx", + "standardSingularBookName": "Éxodo", + "standardSingularAbbreviation": "Éx.", + "officialSingularAbbreviation": "Éx", + "standardPluralBookName": "Éxodo", + "standardPluralAbbreviation": "Éx.", + "officialPluralAbbreviation": "Éx", + "bookDisplayTitle": "El libro de Éxodo" + }, + "3": { + "chapterCount": "27", + "standardName": "Levítico", + "standardAbbreviation": "Lev.", + "officialAbbreviation": "Le", + "standardSingularBookName": "Levítico", + "standardSingularAbbreviation": "Lev.", + "officialSingularAbbreviation": "Le", + "standardPluralBookName": "Levítico", + "standardPluralAbbreviation": "Lev.", + "officialPluralAbbreviation": "Le", + "bookDisplayTitle": "El libro de Levítico" + }, + "4": { + "chapterCount": "36", + "standardName": "Números", + "standardAbbreviation": "Núm.", + "officialAbbreviation": "Nú", + "standardSingularBookName": "Números", + "standardSingularAbbreviation": "Núm.", + "officialSingularAbbreviation": "Nú", + "standardPluralBookName": "Números", + "standardPluralAbbreviation": "Núm.", + "officialPluralAbbreviation": "Nú", + "bookDisplayTitle": "El libro de Números" + }, + "5": { + "chapterCount": "34", + "standardName": "Deuteronomio", + "standardAbbreviation": "Deut.", + "officialAbbreviation": "Dt", + "standardSingularBookName": "Deuteronomio", + "standardSingularAbbreviation": "Deut.", + "officialSingularAbbreviation": "Dt", + "standardPluralBookName": "Deuteronomio", + "standardPluralAbbreviation": "Deut.", + "officialPluralAbbreviation": "Dt", + "bookDisplayTitle": "El libro de Deuteronomio" + }, + "6": { + "chapterCount": "24", + "standardName": "Josué", + "standardAbbreviation": "Jos.", + "officialAbbreviation": "Jos", + "standardSingularBookName": "Josué", + "standardSingularAbbreviation": "Jos.", + "officialSingularAbbreviation": "Jos", + "standardPluralBookName": "Josué", + "standardPluralAbbreviation": "Jos.", + "officialPluralAbbreviation": "Jos", + "bookDisplayTitle": "El libro de Josué" + }, + "7": { + "chapterCount": "21", + "standardName": "Jueces", + "standardAbbreviation": "Juec.", + "officialAbbreviation": "Jue", + "standardSingularBookName": "Jueces", + "standardSingularAbbreviation": "Juec.", + "officialSingularAbbreviation": "Jue", + "standardPluralBookName": "Jueces", + "standardPluralAbbreviation": "Juec.", + "officialPluralAbbreviation": "Jue", + "bookDisplayTitle": "El libro de Jueces" + }, + "8": { + "chapterCount": "4", + "standardName": "Rut", + "standardAbbreviation": "Rut", + "officialAbbreviation": "Rut", + "standardSingularBookName": "Rut", + "standardSingularAbbreviation": "Rut", + "officialSingularAbbreviation": "Rut", + "standardPluralBookName": "Rut", + "standardPluralAbbreviation": "Rut", + "officialPluralAbbreviation": "Rut", + "bookDisplayTitle": "El libro de Rut" + }, + "9": { + "chapterCount": "31", + "standardName": "1 Samuel", + "standardAbbreviation": "1 Sam.", + "officialAbbreviation": "1Sa", + "standardSingularBookName": "1 Samuel", + "standardSingularAbbreviation": "1 Sam.", + "officialSingularAbbreviation": "1Sa", + "standardPluralBookName": "1 Samuel", + "standardPluralAbbreviation": "1 Sam.", + "officialPluralAbbreviation": "1Sa", + "bookDisplayTitle": "Primer Libro de Samuel" + }, + "10": { + "chapterCount": "24", + "standardName": "2 Samuel", + "standardAbbreviation": "2 Sam.", + "officialAbbreviation": "2Sa", + "standardSingularBookName": "2 Samuel", + "standardSingularAbbreviation": "2 Sam.", + "officialSingularAbbreviation": "2Sa", + "standardPluralBookName": "2 Samuel", + "standardPluralAbbreviation": "2 Sam.", + "officialPluralAbbreviation": "2Sa", + "bookDisplayTitle": "Segundo Libro de Samuel" + }, + "11": { + "chapterCount": "22", + "standardName": "1 Reyes", + "standardAbbreviation": "1 Rey.", + "officialAbbreviation": "1Re", + "standardSingularBookName": "1 Reyes", + "standardSingularAbbreviation": "1 Rey.", + "officialSingularAbbreviation": "1Re", + "standardPluralBookName": "1 Reyes", + "standardPluralAbbreviation": "1 Rey.", + "officialPluralAbbreviation": "1Re", + "bookDisplayTitle": "Primer Libro de los Reyes" + }, + "12": { + "chapterCount": "25", + "standardName": "2 Reyes", + "standardAbbreviation": "2 Rey.", + "officialAbbreviation": "2Re", + "standardSingularBookName": "2 Reyes", + "standardSingularAbbreviation": "2 Rey.", + "officialSingularAbbreviation": "2Re", + "standardPluralBookName": "2 Reyes", + "standardPluralAbbreviation": "2 Rey.", + "officialPluralAbbreviation": "2Re", + "bookDisplayTitle": "Segundo Libro de los Reyes" + }, + "13": { + "chapterCount": "29", + "standardName": "1 Crónicas", + "standardAbbreviation": "1 Crón.", + "officialAbbreviation": "1Cr", + "standardSingularBookName": "1 Crónicas", + "standardSingularAbbreviation": "1 Crón.", + "officialSingularAbbreviation": "1Cr", + "standardPluralBookName": "1 Crónicas", + "standardPluralAbbreviation": "1 Crón.", + "officialPluralAbbreviation": "1Cr", + "bookDisplayTitle": "Primer Libro de las Crónicas" + }, + "14": { + "chapterCount": "36", + "standardName": "2 Crónicas", + "standardAbbreviation": "2 Crón.", + "officialAbbreviation": "2Cr", + "standardSingularBookName": "2 Crónicas", + "standardSingularAbbreviation": "2 Crón.", + "officialSingularAbbreviation": "2Cr", + "standardPluralBookName": "2 Crónicas", + "standardPluralAbbreviation": "2 Crón.", + "officialPluralAbbreviation": "2Cr", + "bookDisplayTitle": "Segundo Libro de las Crónicas" + }, + "15": { + "chapterCount": "10", + "standardName": "Esdras", + "standardAbbreviation": "Esd.", + "officialAbbreviation": "Esd", + "standardSingularBookName": "Esdras", + "standardSingularAbbreviation": "Esd.", + "officialSingularAbbreviation": "Esd", + "standardPluralBookName": "Esdras", + "standardPluralAbbreviation": "Esd.", + "officialPluralAbbreviation": "Esd", + "bookDisplayTitle": "El libro de Esdras" + }, + "16": { + "chapterCount": "13", + "standardName": "Nehemías", + "standardAbbreviation": "Neh.", + "officialAbbreviation": "Ne", + "standardSingularBookName": "Nehemías", + "standardSingularAbbreviation": "Neh.", + "officialSingularAbbreviation": "Ne", + "standardPluralBookName": "Nehemías", + "standardPluralAbbreviation": "Neh.", + "officialPluralAbbreviation": "Ne", + "bookDisplayTitle": "El libro de Nehemías" + }, + "17": { + "chapterCount": "10", + "standardName": "Ester", + "standardAbbreviation": "Est.", + "officialAbbreviation": "Est", + "standardSingularBookName": "Ester", + "standardSingularAbbreviation": "Est.", + "officialSingularAbbreviation": "Est", + "standardPluralBookName": "Ester", + "standardPluralAbbreviation": "Est.", + "officialPluralAbbreviation": "Est", + "bookDisplayTitle": "El libro de Ester" + }, + "18": { + "chapterCount": "42", + "standardName": "Job", + "standardAbbreviation": "Job", + "officialAbbreviation": "Job", + "standardSingularBookName": "Job", + "standardSingularAbbreviation": "Job", + "officialSingularAbbreviation": "Job", + "standardPluralBookName": "Job", + "standardPluralAbbreviation": "Job", + "officialPluralAbbreviation": "Job", + "bookDisplayTitle": "El libro de Job" + }, + "19": { + "chapterCount": "150", + "standardName": "Salmos", + "standardAbbreviation": "Sal.", + "officialAbbreviation": "Sl", + "standardSingularBookName": "Salmo", + "standardSingularAbbreviation": "Sal.", + "officialSingularAbbreviation": "Sl", + "standardPluralBookName": "Salmos", + "standardPluralAbbreviation": "Sal.", + "officialPluralAbbreviation": "Sl", + "bookDisplayTitle": "El libro de los Salmos" + }, + "20": { + "chapterCount": "31", + "standardName": "Proverbios", + "standardAbbreviation": "Prov.", + "officialAbbreviation": "Pr", + "standardSingularBookName": "Proverbios", + "standardSingularAbbreviation": "Prov.", + "officialSingularAbbreviation": "Pr", + "standardPluralBookName": "Proverbios", + "standardPluralAbbreviation": "Prov.", + "officialPluralAbbreviation": "Pr", + "bookDisplayTitle": "El libro de Proverbios" + }, + "21": { + "chapterCount": "12", + "standardName": "Eclesiastés", + "standardAbbreviation": "Ecl.", + "officialAbbreviation": "Ec", + "standardSingularBookName": "Eclesiastés", + "standardSingularAbbreviation": "Ecl.", + "officialSingularAbbreviation": "Ec", + "standardPluralBookName": "Eclesiastés", + "standardPluralAbbreviation": "Ecl.", + "officialPluralAbbreviation": "Ec", + "bookDisplayTitle": "El libro de Eclesiastés" + }, + "22": { + "chapterCount": "8", + "standardName": "El Cantar de los Cantares", + "standardAbbreviation": "Cant.", + "officialAbbreviation": "Can", + "standardSingularBookName": "El Cantar de los Cantares", + "standardSingularAbbreviation": "Cant.", + "officialSingularAbbreviation": "Can", + "standardPluralBookName": "El Cantar de los Cantares", + "standardPluralAbbreviation": "Cant.", + "officialPluralAbbreviation": "Can", + "bookDisplayTitle": "El Cantar de los Cantares" + }, + "23": { + "chapterCount": "66", + "standardName": "Isaías", + "standardAbbreviation": "Is.", + "officialAbbreviation": "Is", + "standardSingularBookName": "Isaías", + "standardSingularAbbreviation": "Is.", + "officialSingularAbbreviation": "Is", + "standardPluralBookName": "Isaías", + "standardPluralAbbreviation": "Is.", + "officialPluralAbbreviation": "Is", + "bookDisplayTitle": "El libro de Isaías" + }, + "24": { + "chapterCount": "52", + "standardName": "Jeremías", + "standardAbbreviation": "Jer.", + "officialAbbreviation": "Jer", + "standardSingularBookName": "Jeremías", + "standardSingularAbbreviation": "Jer.", + "officialSingularAbbreviation": "Jer", + "standardPluralBookName": "Jeremías", + "standardPluralAbbreviation": "Jer.", + "officialPluralAbbreviation": "Jer", + "bookDisplayTitle": "El libro de Jeremías" + }, + "25": { + "chapterCount": "5", + "standardName": "Lamentaciones", + "standardAbbreviation": "Lam.", + "officialAbbreviation": "Lam", + "standardSingularBookName": "Lamentaciones", + "standardSingularAbbreviation": "Lam.", + "officialSingularAbbreviation": "Lam", + "standardPluralBookName": "Lamentaciones", + "standardPluralAbbreviation": "Lam.", + "officialPluralAbbreviation": "Lam", + "bookDisplayTitle": "El libro de Lamentaciones" + }, + "26": { + "chapterCount": "48", + "standardName": "Ezequiel", + "standardAbbreviation": "Ezeq.", + "officialAbbreviation": "Eze", + "standardSingularBookName": "Ezequiel", + "standardSingularAbbreviation": "Ezeq.", + "officialSingularAbbreviation": "Eze", + "standardPluralBookName": "Ezequiel", + "standardPluralAbbreviation": "Ezeq.", + "officialPluralAbbreviation": "Eze", + "bookDisplayTitle": "El libro de Ezequiel" + }, + "27": { + "chapterCount": "12", + "standardName": "Daniel", + "standardAbbreviation": "Dan.", + "officialAbbreviation": "Da", + "standardSingularBookName": "Daniel", + "standardSingularAbbreviation": "Dan.", + "officialSingularAbbreviation": "Da", + "standardPluralBookName": "Daniel", + "standardPluralAbbreviation": "Dan.", + "officialPluralAbbreviation": "Da", + "bookDisplayTitle": "El libro de Daniel" + }, + "28": { + "chapterCount": "14", + "standardName": "Oseas", + "standardAbbreviation": "Os.", + "officialAbbreviation": "Os", + "standardSingularBookName": "Oseas", + "standardSingularAbbreviation": "Os.", + "officialSingularAbbreviation": "Os", + "standardPluralBookName": "Oseas", + "standardPluralAbbreviation": "Os.", + "officialPluralAbbreviation": "Os", + "bookDisplayTitle": "El libro de Oseas" + }, + "29": { + "chapterCount": "3", + "standardName": "Joel", + "standardAbbreviation": "Joel", + "officialAbbreviation": "Joe", + "standardSingularBookName": "Joel", + "standardSingularAbbreviation": "Joel", + "officialSingularAbbreviation": "Joe", + "standardPluralBookName": "Joel", + "standardPluralAbbreviation": "Joel", + "officialPluralAbbreviation": "Joe", + "bookDisplayTitle": "El libro de Joel" + }, + "30": { + "chapterCount": "9", + "standardName": "Amós", + "standardAbbreviation": "Amós", + "officialAbbreviation": "Am", + "standardSingularBookName": "Amós", + "standardSingularAbbreviation": "Amós", + "officialSingularAbbreviation": "Am", + "standardPluralBookName": "Amós", + "standardPluralAbbreviation": "Amós", + "officialPluralAbbreviation": "Am", + "bookDisplayTitle": "El libro de Amós" + }, + "31": { + "chapterCount": "1", + "standardName": "Abdías", + "standardAbbreviation": "Abd.", + "officialAbbreviation": "Abd", + "standardSingularBookName": "Abdías", + "standardSingularAbbreviation": "Abd.", + "officialSingularAbbreviation": "Abd", + "standardPluralBookName": "Abdías", + "standardPluralAbbreviation": "Abd.", + "officialPluralAbbreviation": "Abd", + "bookDisplayTitle": "El libro de Abdías" + }, + "32": { + "chapterCount": "4", + "standardName": "Jonás", + "standardAbbreviation": "Jon.", + "officialAbbreviation": "Jon", + "standardSingularBookName": "Jonás", + "standardSingularAbbreviation": "Jon.", + "officialSingularAbbreviation": "Jon", + "standardPluralBookName": "Jonás", + "standardPluralAbbreviation": "Jon.", + "officialPluralAbbreviation": "Jon", + "bookDisplayTitle": "El libro de Jonás" + }, + "33": { + "chapterCount": "7", + "standardName": "Miqueas", + "standardAbbreviation": "Miq.", + "officialAbbreviation": "Miq", + "standardSingularBookName": "Miqueas", + "standardSingularAbbreviation": "Miq.", + "officialSingularAbbreviation": "Miq", + "standardPluralBookName": "Miqueas", + "standardPluralAbbreviation": "Miq.", + "officialPluralAbbreviation": "Miq", + "bookDisplayTitle": "El libro de Miqueas" + }, + "34": { + "chapterCount": "3", + "standardName": "Nahúm", + "standardAbbreviation": "Nah.", + "officialAbbreviation": "Na", + "standardSingularBookName": "Nahúm", + "standardSingularAbbreviation": "Nah.", + "officialSingularAbbreviation": "Na", + "standardPluralBookName": "Nahúm", + "standardPluralAbbreviation": "Nah.", + "officialPluralAbbreviation": "Na", + "bookDisplayTitle": "El libro de Nahúm" + }, + "35": { + "chapterCount": "3", + "standardName": "Habacuc", + "standardAbbreviation": "Hab.", + "officialAbbreviation": "Hab", + "standardSingularBookName": "Habacuc", + "standardSingularAbbreviation": "Hab.", + "officialSingularAbbreviation": "Hab", + "standardPluralBookName": "Habacuc", + "standardPluralAbbreviation": "Hab.", + "officialPluralAbbreviation": "Hab", + "bookDisplayTitle": "El libro de Habacuc" + }, + "36": { + "chapterCount": "3", + "standardName": "Sofonías", + "standardAbbreviation": "Sof.", + "officialAbbreviation": "Sof", + "standardSingularBookName": "Sofonías", + "standardSingularAbbreviation": "Sof.", + "officialSingularAbbreviation": "Sof", + "standardPluralBookName": "Sofonías", + "standardPluralAbbreviation": "Sof.", + "officialPluralAbbreviation": "Sof", + "bookDisplayTitle": "El libro de Sofonías" + }, + "37": { + "chapterCount": "2", + "standardName": "Ageo", + "standardAbbreviation": "Ageo", + "officialAbbreviation": "Ag", + "standardSingularBookName": "Ageo", + "standardSingularAbbreviation": "Ageo", + "officialSingularAbbreviation": "Ag", + "standardPluralBookName": "Ageo", + "standardPluralAbbreviation": "Ageo", + "officialPluralAbbreviation": "Ag", + "bookDisplayTitle": "El libro de Ageo" + }, + "38": { + "chapterCount": "14", + "standardName": "Zacarías", + "standardAbbreviation": "Zac.", + "officialAbbreviation": "Zac", + "standardSingularBookName": "Zacarías", + "standardSingularAbbreviation": "Zac.", + "officialSingularAbbreviation": "Zac", + "standardPluralBookName": "Zacarías", + "standardPluralAbbreviation": "Zac.", + "officialPluralAbbreviation": "Zac", + "bookDisplayTitle": "El libro de Zacarías" + }, + "39": { + "chapterCount": "4", + "standardName": "Malaquías", + "standardAbbreviation": "Mal.", + "officialAbbreviation": "Mal", + "standardSingularBookName": "Malaquías", + "standardSingularAbbreviation": "Mal.", + "officialSingularAbbreviation": "Mal", + "standardPluralBookName": "Malaquías", + "standardPluralAbbreviation": "Mal.", + "officialPluralAbbreviation": "Mal", + "bookDisplayTitle": "El libro de Malaquías" + }, + "40": { + "chapterCount": "28", + "standardName": "Mateo", + "standardAbbreviation": "Mat.", + "officialAbbreviation": "Mt", + "standardSingularBookName": "Mateo", + "standardSingularAbbreviation": "Mat.", + "officialSingularAbbreviation": "Mt", + "standardPluralBookName": "Mateo", + "standardPluralAbbreviation": "Mat.", + "officialPluralAbbreviation": "Mt", + "bookDisplayTitle": "Las Buenas Noticias según Mateo" + }, + "41": { + "chapterCount": "16", + "standardName": "Marcos", + "standardAbbreviation": "Mar.", + "officialAbbreviation": "Mr", + "standardSingularBookName": "Marcos", + "standardSingularAbbreviation": "Mar.", + "officialSingularAbbreviation": "Mr", + "standardPluralBookName": "Marcos", + "standardPluralAbbreviation": "Mar.", + "officialPluralAbbreviation": "Mr", + "bookDisplayTitle": "Las Buenas Noticias según Marcos" + }, + "42": { + "chapterCount": "24", + "standardName": "Lucas", + "standardAbbreviation": "Luc.", + "officialAbbreviation": "Lu", + "standardSingularBookName": "Lucas", + "standardSingularAbbreviation": "Luc.", + "officialSingularAbbreviation": "Lu", + "standardPluralBookName": "Lucas", + "standardPluralAbbreviation": "Luc.", + "officialPluralAbbreviation": "Lu", + "bookDisplayTitle": "Las Buenas Noticias según Lucas" + }, + "43": { + "chapterCount": "21", + "standardName": "Juan", + "standardAbbreviation": "Juan", + "officialAbbreviation": "Jn", + "standardSingularBookName": "Juan", + "standardSingularAbbreviation": "Juan", + "officialSingularAbbreviation": "Jn", + "standardPluralBookName": "Juan", + "standardPluralAbbreviation": "Juan", + "officialPluralAbbreviation": "Jn", + "bookDisplayTitle": "Las Buenas Noticias según Juan" + }, + "44": { + "chapterCount": "28", + "standardName": "Hechos", + "standardAbbreviation": "Hech.", + "officialAbbreviation": "Hch", + "standardSingularBookName": "Hechos", + "standardSingularAbbreviation": "Hech.", + "officialSingularAbbreviation": "Hch", + "standardPluralBookName": "Hechos", + "standardPluralAbbreviation": "Hech.", + "officialPluralAbbreviation": "Hch", + "bookDisplayTitle": "Hechos de los Apóstoles" + }, + "45": { + "chapterCount": "16", + "standardName": "Romanos", + "standardAbbreviation": "Rom.", + "officialAbbreviation": "Ro", + "standardSingularBookName": "Romanos", + "standardSingularAbbreviation": "Rom.", + "officialSingularAbbreviation": "Ro", + "standardPluralBookName": "Romanos", + "standardPluralAbbreviation": "Rom.", + "officialPluralAbbreviation": "Ro", + "bookDisplayTitle": "Carta a los Romanos" + }, + "46": { + "chapterCount": "16", + "standardName": "1 Corintios", + "standardAbbreviation": "1 Cor.", + "officialAbbreviation": "1Co", + "standardSingularBookName": "1 Corintios", + "standardSingularAbbreviation": "1 Cor.", + "officialSingularAbbreviation": "1Co", + "standardPluralBookName": "1 Corintios", + "standardPluralAbbreviation": "1 Cor.", + "officialPluralAbbreviation": "1Co", + "bookDisplayTitle": "Primera Carta a los Corintios" + }, + "47": { + "chapterCount": "13", + "standardName": "2 Corintios", + "standardAbbreviation": "2 Cor.", + "officialAbbreviation": "2Co", + "standardSingularBookName": "2 Corintios", + "standardSingularAbbreviation": "2 Cor.", + "officialSingularAbbreviation": "2Co", + "standardPluralBookName": "2 Corintios", + "standardPluralAbbreviation": "2 Cor.", + "officialPluralAbbreviation": "2Co", + "bookDisplayTitle": "Segunda Carta a los Corintios" + }, + "48": { + "chapterCount": "6", + "standardName": "Gálatas", + "standardAbbreviation": "Gál.", + "officialAbbreviation": "Gál", + "standardSingularBookName": "Gálatas", + "standardSingularAbbreviation": "Gál.", + "officialSingularAbbreviation": "Gál", + "standardPluralBookName": "Gálatas", + "standardPluralAbbreviation": "Gál.", + "officialPluralAbbreviation": "Gál", + "bookDisplayTitle": "Carta a los Gálatas" + }, + "49": { + "chapterCount": "6", + "standardName": "Efesios", + "standardAbbreviation": "Efes.", + "officialAbbreviation": "Ef", + "standardSingularBookName": "Efesios", + "standardSingularAbbreviation": "Efes.", + "officialSingularAbbreviation": "Ef", + "standardPluralBookName": "Efesios", + "standardPluralAbbreviation": "Efes.", + "officialPluralAbbreviation": "Ef", + "bookDisplayTitle": "Carta a los Efesios" + }, + "50": { + "chapterCount": "4", + "standardName": "Filipenses", + "standardAbbreviation": "Filip.", + "officialAbbreviation": "Flp", + "standardSingularBookName": "Filipenses", + "standardSingularAbbreviation": "Filip.", + "officialSingularAbbreviation": "Flp", + "standardPluralBookName": "Filipenses", + "standardPluralAbbreviation": "Filip.", + "officialPluralAbbreviation": "Flp", + "bookDisplayTitle": "Carta a los Filipenses" + }, + "51": { + "chapterCount": "4", + "standardName": "Colosenses", + "standardAbbreviation": "Col.", + "officialAbbreviation": "Col", + "standardSingularBookName": "Colosenses", + "standardSingularAbbreviation": "Col.", + "officialSingularAbbreviation": "Col", + "standardPluralBookName": "Colosenses", + "standardPluralAbbreviation": "Col.", + "officialPluralAbbreviation": "Col", + "bookDisplayTitle": "Carta a los Colosenses" + }, + "52": { + "chapterCount": "5", + "standardName": "1 Tesalonicenses", + "standardAbbreviation": "1 Tes.", + "officialAbbreviation": "1Te", + "standardSingularBookName": "1 Tesalonicenses", + "standardSingularAbbreviation": "1 Tes.", + "officialSingularAbbreviation": "1Te", + "standardPluralBookName": "1 Tesalonicenses", + "standardPluralAbbreviation": "1 Tes.", + "officialPluralAbbreviation": "1Te", + "bookDisplayTitle": "Primera Carta a los Tesalonicenses" + }, + "53": { + "chapterCount": "3", + "standardName": "2 Tesalonicenses", + "standardAbbreviation": "2 Tes.", + "officialAbbreviation": "2Te", + "standardSingularBookName": "2 Tesalonicenses", + "standardSingularAbbreviation": "2 Tes.", + "officialSingularAbbreviation": "2Te", + "standardPluralBookName": "2 Tesalonicenses", + "standardPluralAbbreviation": "2 Tes.", + "officialPluralAbbreviation": "2Te", + "bookDisplayTitle": "Segunda Carta a los Tesalonicenses" + }, + "54": { + "chapterCount": "6", + "standardName": "1 Timoteo", + "standardAbbreviation": "1 Tim.", + "officialAbbreviation": "1Ti", + "standardSingularBookName": "1 Timoteo", + "standardSingularAbbreviation": "1 Tim.", + "officialSingularAbbreviation": "1Ti", + "standardPluralBookName": "1 Timoteo", + "standardPluralAbbreviation": "1 Tim.", + "officialPluralAbbreviation": "1Ti", + "bookDisplayTitle": "Primera Carta a Timoteo" + }, + "55": { + "chapterCount": "4", + "standardName": "2 Timoteo", + "standardAbbreviation": "2 Tim.", + "officialAbbreviation": "2Ti", + "standardSingularBookName": "2 Timoteo", + "standardSingularAbbreviation": "2 Tim.", + "officialSingularAbbreviation": "2Ti", + "standardPluralBookName": "2 Timoteo", + "standardPluralAbbreviation": "2 Tim.", + "officialPluralAbbreviation": "2Ti", + "bookDisplayTitle": "Segunda Carta a Timoteo" + }, + "56": { + "chapterCount": "3", + "standardName": "Tito", + "standardAbbreviation": "Tito", + "officialAbbreviation": "Tit", + "standardSingularBookName": "Tito", + "standardSingularAbbreviation": "Tito", + "officialSingularAbbreviation": "Tit", + "standardPluralBookName": "Tito", + "standardPluralAbbreviation": "Tito", + "officialPluralAbbreviation": "Tit", + "bookDisplayTitle": "Carta a Tito" + }, + "57": { + "chapterCount": "1", + "standardName": "Filemón", + "standardAbbreviation": "Filem.", + "officialAbbreviation": "Flm", + "standardSingularBookName": "Filemón", + "standardSingularAbbreviation": "Filem.", + "officialSingularAbbreviation": "Flm", + "standardPluralBookName": "Filemón", + "standardPluralAbbreviation": "Filem.", + "officialPluralAbbreviation": "Flm", + "bookDisplayTitle": "Carta a Filemón" + }, + "58": { + "chapterCount": "13", + "standardName": "Hebreos", + "standardAbbreviation": "Heb.", + "officialAbbreviation": "Heb", + "standardSingularBookName": "Hebreos", + "standardSingularAbbreviation": "Heb.", + "officialSingularAbbreviation": "Heb", + "standardPluralBookName": "Hebreos", + "standardPluralAbbreviation": "Heb.", + "officialPluralAbbreviation": "Heb", + "bookDisplayTitle": "Carta a los Hebreos" + }, + "59": { + "chapterCount": "5", + "standardName": "Santiago", + "standardAbbreviation": "Sant.", + "officialAbbreviation": "Snt", + "standardSingularBookName": "Santiago", + "standardSingularAbbreviation": "Sant.", + "officialSingularAbbreviation": "Snt", + "standardPluralBookName": "Santiago", + "standardPluralAbbreviation": "Sant.", + "officialPluralAbbreviation": "Snt", + "bookDisplayTitle": "Carta de Santiago" + }, + "60": { + "chapterCount": "5", + "standardName": "1 Pedro", + "standardAbbreviation": "1 Ped.", + "officialAbbreviation": "1Pe", + "standardSingularBookName": "1 Pedro", + "standardSingularAbbreviation": "1 Ped.", + "officialSingularAbbreviation": "1Pe", + "standardPluralBookName": "1 Pedro", + "standardPluralAbbreviation": "1 Ped.", + "officialPluralAbbreviation": "1Pe", + "bookDisplayTitle": "Primera Carta de Pedro" + }, + "61": { + "chapterCount": "3", + "standardName": "2 Pedro", + "standardAbbreviation": "2 Ped.", + "officialAbbreviation": "2Pe", + "standardSingularBookName": "2 Pedro", + "standardSingularAbbreviation": "2 Ped.", + "officialSingularAbbreviation": "2Pe", + "standardPluralBookName": "2 Pedro", + "standardPluralAbbreviation": "2 Ped.", + "officialPluralAbbreviation": "2Pe", + "bookDisplayTitle": "Segunda Carta de Pedro" + }, + "62": { + "chapterCount": "5", + "standardName": "1 Juan", + "standardAbbreviation": "1 Juan", + "officialAbbreviation": "1Jn", + "standardSingularBookName": "1 Juan", + "standardSingularAbbreviation": "1 Juan", + "officialSingularAbbreviation": "1Jn", + "standardPluralBookName": "1 Juan", + "standardPluralAbbreviation": "1 Juan", + "officialPluralAbbreviation": "1Jn", + "bookDisplayTitle": "Primera Carta de Juan" + }, + "63": { + "chapterCount": "1", + "standardName": "2 Juan", + "standardAbbreviation": "2 Juan", + "officialAbbreviation": "2Jn", + "standardSingularBookName": "2 Juan", + "standardSingularAbbreviation": "2 Juan", + "officialSingularAbbreviation": "2Jn", + "standardPluralBookName": "2 Juan", + "standardPluralAbbreviation": "2 Juan", + "officialPluralAbbreviation": "2Jn", + "bookDisplayTitle": "Segunda Carta de Juan" + }, + "64": { + "chapterCount": "1", + "standardName": "3 Juan", + "standardAbbreviation": "3 Juan", + "officialAbbreviation": "3Jn", + "standardSingularBookName": "3 Juan", + "standardSingularAbbreviation": "3 Juan", + "officialSingularAbbreviation": "3Jn", + "standardPluralBookName": "3 Juan", + "standardPluralAbbreviation": "3 Juan", + "officialPluralAbbreviation": "3Jn", + "bookDisplayTitle": "Tercera Carta de Juan" + }, + "65": { + "chapterCount": "1", + "standardName": "Judas", + "standardAbbreviation": "Jud.", + "officialAbbreviation": "Jud", + "standardSingularBookName": "Judas", + "standardSingularAbbreviation": "Jud.", + "officialSingularAbbreviation": "Jud", + "standardPluralBookName": "Judas", + "standardPluralAbbreviation": "Jud.", + "officialPluralAbbreviation": "Jud", + "bookDisplayTitle": "Carta de Judas" + }, + "66": { + "chapterCount": "22", + "standardName": "Apocalipsis", + "standardAbbreviation": "Apoc.", + "officialAbbreviation": "Ap", + "standardSingularBookName": "Apocalipsis", + "standardSingularAbbreviation": "Apoc.", + "officialSingularAbbreviation": "Ap", + "standardPluralBookName": "Apocalipsis", + "standardPluralAbbreviation": "Apoc.", + "officialPluralAbbreviation": "Ap", + "bookDisplayTitle": "El libro de Apocalipsis" + } + } +} diff --git a/SL/ffv_files/nwtsty_vi.json b/SL/ffv_files/nwtsty_vi.json new file mode 100644 index 0000000..e7bd570 --- /dev/null +++ b/SL/ffv_files/nwtsty_vi.json @@ -0,0 +1,867 @@ +{ + "locale": "vi", + "bookCount": "66", + "vernacularFullName": "Bản dịch Thế Giới Mới (nwt)", + "vernacularAbbreviation": "NWT-vi-nwt", + "titleFormat": "%s | Đọc Kinh Thánh trực tuyến—Tải Kinh Thánh miễn phí: thu âm MP3, PDF", + "books": { + "1": { + "chapterCount": "50", + "standardName": "Sáng thế", + "standardAbbreviation": "Sáng", + "officialAbbreviation": "Sa", + "standardSingularBookName": "Sáng thế", + "standardSingularAbbreviation": "Sáng", + "officialSingularAbbreviation": "Sa", + "standardPluralBookName": "Sáng thế", + "standardPluralAbbreviation": "Sáng", + "officialPluralAbbreviation": "Sa", + "bookDisplayTitle": "Sách Sáng thế" + }, + "2": { + "chapterCount": "40", + "standardName": "Xuất Ai Cập", + "standardAbbreviation": "Xuất", + "officialAbbreviation": "Xu", + "standardSingularBookName": "Xuất Ai Cập", + "standardSingularAbbreviation": "Xuất", + "officialSingularAbbreviation": "Xu", + "standardPluralBookName": "Xuất Ai Cập", + "standardPluralAbbreviation": "Xuất", + "officialPluralAbbreviation": "Xu", + "bookDisplayTitle": "Sách Xuất Ai Cập" + }, + "3": { + "chapterCount": "27", + "standardName": "Lê-vi", + "standardAbbreviation": "Lê", + "officialAbbreviation": "Lê", + "standardSingularBookName": "Lê-vi", + "standardSingularAbbreviation": "Lê", + "officialSingularAbbreviation": "Lê", + "standardPluralBookName": "Lê-vi", + "standardPluralAbbreviation": "Lê", + "officialPluralAbbreviation": "Lê", + "bookDisplayTitle": "Sách Lê-vi" + }, + "4": { + "chapterCount": "36", + "standardName": "Dân số", + "standardAbbreviation": "Dân", + "officialAbbreviation": "Dân", + "standardSingularBookName": "Dân số", + "standardSingularAbbreviation": "Dân", + "officialSingularAbbreviation": "Dân", + "standardPluralBookName": "Dân số", + "standardPluralAbbreviation": "Dân", + "officialPluralAbbreviation": "Dân", + "bookDisplayTitle": "Sách Dân số" + }, + "5": { + "chapterCount": "34", + "standardName": "Phục truyền luật lệ", + "standardAbbreviation": "Phục", + "officialAbbreviation": "Phu", + "standardSingularBookName": "Phục truyền luật lệ", + "standardSingularAbbreviation": "Phục", + "officialSingularAbbreviation": "Phu", + "standardPluralBookName": "Phục truyền luật lệ", + "standardPluralAbbreviation": "Phục", + "officialPluralAbbreviation": "Phu", + "bookDisplayTitle": "Sách Phục truyền luật lệ" + }, + "6": { + "chapterCount": "24", + "standardName": "Giô-suê", + "standardAbbreviation": "Giô-suê", + "officialAbbreviation": "Gs", + "standardSingularBookName": "Giô-suê", + "standardSingularAbbreviation": "Giô-suê", + "officialSingularAbbreviation": "Gs", + "standardPluralBookName": "Giô-suê", + "standardPluralAbbreviation": "Giô-suê", + "officialPluralAbbreviation": "Gs", + "bookDisplayTitle": "Sách Giô-suê" + }, + "7": { + "chapterCount": "21", + "standardName": "Quan xét", + "standardAbbreviation": "Quan", + "officialAbbreviation": "Qu", + "standardSingularBookName": "Quan xét", + "standardSingularAbbreviation": "Quan", + "officialSingularAbbreviation": "Qu", + "standardPluralBookName": "Quan xét", + "standardPluralAbbreviation": "Quan", + "officialPluralAbbreviation": "Qu", + "bookDisplayTitle": "Sách Quan xét" + }, + "8": { + "chapterCount": "4", + "standardName": "Ru-tơ", + "standardAbbreviation": "Ru", + "officialAbbreviation": "Ru", + "standardSingularBookName": "Ru-tơ", + "standardSingularAbbreviation": "Ru", + "officialSingularAbbreviation": "Ru", + "standardPluralBookName": "Ru-tơ", + "standardPluralAbbreviation": "Ru", + "officialPluralAbbreviation": "Ru", + "bookDisplayTitle": "Sách Ru-tơ" + }, + "9": { + "chapterCount": "31", + "standardName": "1 Sa-mu-ên", + "standardAbbreviation": "1 Sa", + "officialAbbreviation": "1Sa", + "standardSingularBookName": "1 Sa-mu-ên", + "standardSingularAbbreviation": "1 Sa", + "officialSingularAbbreviation": "1Sa", + "standardPluralBookName": "1 Sa-mu-ên", + "standardPluralAbbreviation": "1 Sa", + "officialPluralAbbreviation": "1Sa", + "bookDisplayTitle": "Sách 1 Sa-mu-ên" + }, + "10": { + "chapterCount": "24", + "standardName": "2 Sa-mu-ên", + "standardAbbreviation": "2 Sa", + "officialAbbreviation": "2Sa", + "standardSingularBookName": "2 Sa-mu-ên", + "standardSingularAbbreviation": "2 Sa", + "officialSingularAbbreviation": "2Sa", + "standardPluralBookName": "2 Sa-mu-ên", + "standardPluralAbbreviation": "2 Sa", + "officialPluralAbbreviation": "2Sa", + "bookDisplayTitle": "Sách 2 Sa-mu-ên" + }, + "11": { + "chapterCount": "22", + "standardName": "1 Các vua", + "standardAbbreviation": "1 Vua", + "officialAbbreviation": "1V", + "standardSingularBookName": "1 Các vua", + "standardSingularAbbreviation": "1 Vua", + "officialSingularAbbreviation": "1V", + "standardPluralBookName": "1 Các vua", + "standardPluralAbbreviation": "1 Vua", + "officialPluralAbbreviation": "1V", + "bookDisplayTitle": "Sách 1 Các vua" + }, + "12": { + "chapterCount": "25", + "standardName": "2 Các vua", + "standardAbbreviation": "2 Vua", + "officialAbbreviation": "2V", + "standardSingularBookName": "2 Các vua", + "standardSingularAbbreviation": "2 Vua", + "officialSingularAbbreviation": "2V", + "standardPluralBookName": "2 Các vua", + "standardPluralAbbreviation": "2 Vua", + "officialPluralAbbreviation": "2V", + "bookDisplayTitle": "Sách 2 Các vua" + }, + "13": { + "chapterCount": "29", + "standardName": "1 Sử ký", + "standardAbbreviation": "1 Sử", + "officialAbbreviation": "1Sử", + "standardSingularBookName": "1 Sử ký", + "standardSingularAbbreviation": "1 Sử", + "officialSingularAbbreviation": "1Sử", + "standardPluralBookName": "1 Sử ký", + "standardPluralAbbreviation": "1 Sử", + "officialPluralAbbreviation": "1Sử", + "bookDisplayTitle": "Sách 1 Sử ký" + }, + "14": { + "chapterCount": "36", + "standardName": "2 Sử ký", + "standardAbbreviation": "2 Sử", + "officialAbbreviation": "2Sử", + "standardSingularBookName": "2 Sử ký", + "standardSingularAbbreviation": "2 Sử", + "officialSingularAbbreviation": "2Sử", + "standardPluralBookName": "2 Sử ký", + "standardPluralAbbreviation": "2 Sử", + "officialPluralAbbreviation": "2Sử", + "bookDisplayTitle": "Sách 2 Sử ký" + }, + "15": { + "chapterCount": "10", + "standardName": "Ê-xơ-ra", + "standardAbbreviation": "Ê-xơ-ra", + "officialAbbreviation": "Êxr", + "standardSingularBookName": "Ê-xơ-ra", + "standardSingularAbbreviation": "Ê-xơ-ra", + "officialSingularAbbreviation": "Êxr", + "standardPluralBookName": "Ê-xơ-ra", + "standardPluralAbbreviation": "Ê-xơ-ra", + "officialPluralAbbreviation": "Êxr", + "bookDisplayTitle": "Sách Ê-xơ-ra" + }, + "16": { + "chapterCount": "13", + "standardName": "Nê-hê-mi", + "standardAbbreviation": "Nê", + "officialAbbreviation": "Nê", + "standardSingularBookName": "Nê-hê-mi", + "standardSingularAbbreviation": "Nê", + "officialSingularAbbreviation": "Nê", + "standardPluralBookName": "Nê-hê-mi", + "standardPluralAbbreviation": "Nê", + "officialPluralAbbreviation": "Nê", + "bookDisplayTitle": "Sách Nê-hê-mi" + }, + "17": { + "chapterCount": "10", + "standardName": "Ê-xơ-tê", + "standardAbbreviation": "Ê-xơ-tê", + "officialAbbreviation": "Êxt", + "standardSingularBookName": "Ê-xơ-tê", + "standardSingularAbbreviation": "Ê-xơ-tê", + "officialSingularAbbreviation": "Êxt", + "standardPluralBookName": "Ê-xơ-tê", + "standardPluralAbbreviation": "Ê-xơ-tê", + "officialPluralAbbreviation": "Êxt", + "bookDisplayTitle": "Sách Ê-xơ-tê" + }, + "18": { + "chapterCount": "42", + "standardName": "Gióp", + "standardAbbreviation": "Gióp", + "officialAbbreviation": "Gp", + "standardSingularBookName": "Gióp", + "standardSingularAbbreviation": "Gióp", + "officialSingularAbbreviation": "Gp", + "standardPluralBookName": "Gióp", + "standardPluralAbbreviation": "Gióp", + "officialPluralAbbreviation": "Gp", + "bookDisplayTitle": "Sách Gióp" + }, + "19": { + "chapterCount": "150", + "standardName": "Thi thiên", + "standardAbbreviation": "Thi", + "officialAbbreviation": "Th", + "standardSingularBookName": "Thi thiên", + "standardSingularAbbreviation": "Thi", + "officialSingularAbbreviation": "Th", + "standardPluralBookName": "Thi thiên", + "standardPluralAbbreviation": "Thi", + "officialPluralAbbreviation": "Th", + "bookDisplayTitle": "Sách Thi thiên" + }, + "20": { + "chapterCount": "31", + "standardName": "Châm ngôn", + "standardAbbreviation": "Châm", + "officialAbbreviation": "Ch", + "standardSingularBookName": "Châm ngôn", + "standardSingularAbbreviation": "Châm", + "officialSingularAbbreviation": "Ch", + "standardPluralBookName": "Châm ngôn", + "standardPluralAbbreviation": "Châm", + "officialPluralAbbreviation": "Ch", + "bookDisplayTitle": "Sách Châm ngôn" + }, + "21": { + "chapterCount": "12", + "standardName": "Truyền đạo", + "standardAbbreviation": "Truyền", + "officialAbbreviation": "Tr", + "standardSingularBookName": "Truyền đạo", + "standardSingularAbbreviation": "Truyền", + "officialSingularAbbreviation": "Tr", + "standardPluralBookName": "Truyền đạo", + "standardPluralAbbreviation": "Truyền", + "officialPluralAbbreviation": "Tr", + "bookDisplayTitle": "Sách Truyền đạo" + }, + "22": { + "chapterCount": "8", + "standardName": "Nhã ca", + "standardAbbreviation": "Nhã", + "officialAbbreviation": "Nhã", + "standardSingularBookName": "Nhã ca", + "standardSingularAbbreviation": "Nhã", + "officialSingularAbbreviation": "Nhã", + "standardPluralBookName": "Nhã ca", + "standardPluralAbbreviation": "Nhã", + "officialPluralAbbreviation": "Nhã", + "bookDisplayTitle": "Sách Nhã ca" + }, + "23": { + "chapterCount": "66", + "standardName": "Ê-sai", + "standardAbbreviation": "Ê-sai", + "officialAbbreviation": "Ês", + "standardSingularBookName": "Ê-sai", + "standardSingularAbbreviation": "Ê-sai", + "officialSingularAbbreviation": "Ês", + "standardPluralBookName": "Ê-sai", + "standardPluralAbbreviation": "Ê-sai", + "officialPluralAbbreviation": "Ês", + "bookDisplayTitle": "Sách Ê-sai" + }, + "24": { + "chapterCount": "52", + "standardName": "Giê-rê-mi", + "standardAbbreviation": "Giê", + "officialAbbreviation": "Giê", + "standardSingularBookName": "Giê-rê-mi", + "standardSingularAbbreviation": "Giê", + "officialSingularAbbreviation": "Giê", + "standardPluralBookName": "Giê-rê-mi", + "standardPluralAbbreviation": "Giê", + "officialPluralAbbreviation": "Giê", + "bookDisplayTitle": "Sách Giê-rê-mi" + }, + "25": { + "chapterCount": "5", + "standardName": "Ai ca", + "standardAbbreviation": "Ai", + "officialAbbreviation": "Ai", + "standardSingularBookName": "Ai ca", + "standardSingularAbbreviation": "Ai", + "officialSingularAbbreviation": "Ai", + "standardPluralBookName": "Ai ca", + "standardPluralAbbreviation": "Ai", + "officialPluralAbbreviation": "Ai", + "bookDisplayTitle": "Sách Ai ca" + }, + "26": { + "chapterCount": "48", + "standardName": "Ê-xê-chi-ên", + "standardAbbreviation": "Ê-xê", + "officialAbbreviation": "Êxê", + "standardSingularBookName": "Ê-xê-chi-ên", + "standardSingularAbbreviation": "Ê-xê", + "officialSingularAbbreviation": "Êxê", + "standardPluralBookName": "Ê-xê-chi-ên", + "standardPluralAbbreviation": "Ê-xê", + "officialPluralAbbreviation": "Êxê", + "bookDisplayTitle": "Sách Ê-xê-chi-ên" + }, + "27": { + "chapterCount": "12", + "standardName": "Đa-ni-ên", + "standardAbbreviation": "Đa", + "officialAbbreviation": "Đa", + "standardSingularBookName": "Đa-ni-ên", + "standardSingularAbbreviation": "Đa", + "officialSingularAbbreviation": "Đa", + "standardPluralBookName": "Đa-ni-ên", + "standardPluralAbbreviation": "Đa", + "officialPluralAbbreviation": "Đa", + "bookDisplayTitle": "Sách Đa-ni-ên" + }, + "28": { + "chapterCount": "14", + "standardName": "Ô-sê", + "standardAbbreviation": "Ô-sê", + "officialAbbreviation": "Ôsê", + "standardSingularBookName": "Ô-sê", + "standardSingularAbbreviation": "Ô-sê", + "officialSingularAbbreviation": "Ôsê", + "standardPluralBookName": "Ô-sê", + "standardPluralAbbreviation": "Ô-sê", + "officialPluralAbbreviation": "Ôsê", + "bookDisplayTitle": "Sách Ô-sê" + }, + "29": { + "chapterCount": "3", + "standardName": "Giô-ên", + "standardAbbreviation": "Giô-ên", + "officialAbbreviation": "Gê", + "standardSingularBookName": "Giô-ên", + "standardSingularAbbreviation": "Giô-ên", + "officialSingularAbbreviation": "Gê", + "standardPluralBookName": "Giô-ên", + "standardPluralAbbreviation": "Giô-ên", + "officialPluralAbbreviation": "Gê", + "bookDisplayTitle": "Sách Giô-ên" + }, + "30": { + "chapterCount": "9", + "standardName": "A-mốt", + "standardAbbreviation": "A-mốt", + "officialAbbreviation": "Am", + "standardSingularBookName": "A-mốt", + "standardSingularAbbreviation": "A-mốt", + "officialSingularAbbreviation": "Am", + "standardPluralBookName": "A-mốt", + "standardPluralAbbreviation": "A-mốt", + "officialPluralAbbreviation": "Am", + "bookDisplayTitle": "Sách A-mốt" + }, + "31": { + "chapterCount": "1", + "standardName": "Áp-đia", + "standardAbbreviation": "Áp", + "officialAbbreviation": "Áp", + "standardSingularBookName": "Áp-đia", + "standardSingularAbbreviation": "Áp", + "officialSingularAbbreviation": "Áp", + "standardPluralBookName": "Áp-đia", + "standardPluralAbbreviation": "Áp", + "officialPluralAbbreviation": "Áp", + "bookDisplayTitle": "Sách Áp-đia" + }, + "32": { + "chapterCount": "4", + "standardName": "Giô-na", + "standardAbbreviation": "Giô-na", + "officialAbbreviation": "Gn", + "standardSingularBookName": "Giô-na", + "standardSingularAbbreviation": "Giô-na", + "officialSingularAbbreviation": "Gn", + "standardPluralBookName": "Giô-na", + "standardPluralAbbreviation": "Giô-na", + "officialPluralAbbreviation": "Gn", + "bookDisplayTitle": "Sách Giô-na" + }, + "33": { + "chapterCount": "7", + "standardName": "Mi-chê", + "standardAbbreviation": "Mi", + "officialAbbreviation": "Mi", + "standardSingularBookName": "Mi-chê", + "standardSingularAbbreviation": "Mi", + "officialSingularAbbreviation": "Mi", + "standardPluralBookName": "Mi-chê", + "standardPluralAbbreviation": "Mi", + "officialPluralAbbreviation": "Mi", + "bookDisplayTitle": "Sách Mi-chê" + }, + "34": { + "chapterCount": "3", + "standardName": "Na-hum", + "standardAbbreviation": "Na", + "officialAbbreviation": "Na", + "standardSingularBookName": "Na-hum", + "standardSingularAbbreviation": "Na", + "officialSingularAbbreviation": "Na", + "standardPluralBookName": "Na-hum", + "standardPluralAbbreviation": "Na", + "officialPluralAbbreviation": "Na", + "bookDisplayTitle": "Sách Na-hum" + }, + "35": { + "chapterCount": "3", + "standardName": "Ha-ba-cúc", + "standardAbbreviation": "Ha-ba", + "officialAbbreviation": "Hab", + "standardSingularBookName": "Ha-ba-cúc", + "standardSingularAbbreviation": "Ha-ba", + "officialSingularAbbreviation": "Hab", + "standardPluralBookName": "Ha-ba-cúc", + "standardPluralAbbreviation": "Ha-ba", + "officialPluralAbbreviation": "Hab", + "bookDisplayTitle": "Sách Ha-ba-cúc" + }, + "36": { + "chapterCount": "3", + "standardName": "Xô-phô-ni", + "standardAbbreviation": "Xô", + "officialAbbreviation": "Xô", + "standardSingularBookName": "Xô-phô-ni", + "standardSingularAbbreviation": "Xô", + "officialSingularAbbreviation": "Xô", + "standardPluralBookName": "Xô-phô-ni", + "standardPluralAbbreviation": "Xô", + "officialPluralAbbreviation": "Xô", + "bookDisplayTitle": "Sách Xô-phô-ni" + }, + "37": { + "chapterCount": "2", + "standardName": "Ha-gai", + "standardAbbreviation": "Ha-gai", + "officialAbbreviation": "Hag", + "standardSingularBookName": "Ha-gai", + "standardSingularAbbreviation": "Ha-gai", + "officialSingularAbbreviation": "Hag", + "standardPluralBookName": "Ha-gai", + "standardPluralAbbreviation": "Ha-gai", + "officialPluralAbbreviation": "Hag", + "bookDisplayTitle": "Sách Ha-gai" + }, + "38": { + "chapterCount": "14", + "standardName": "Xa-cha-ri", + "standardAbbreviation": "Xa", + "officialAbbreviation": "Xa", + "standardSingularBookName": "Xa-cha-ri", + "standardSingularAbbreviation": "Xa", + "officialSingularAbbreviation": "Xa", + "standardPluralBookName": "Xa-cha-ri", + "standardPluralAbbreviation": "Xa", + "officialPluralAbbreviation": "Xa", + "bookDisplayTitle": "Sách Xa-cha-ri" + }, + "39": { + "chapterCount": "4", + "standardName": "Ma-la-chi", + "standardAbbreviation": "Mal", + "officialAbbreviation": "Mal", + "standardSingularBookName": "Ma-la-chi", + "standardSingularAbbreviation": "Mal", + "officialSingularAbbreviation": "Mal", + "standardPluralBookName": "Ma-la-chi", + "standardPluralAbbreviation": "Mal", + "officialPluralAbbreviation": "Mal", + "bookDisplayTitle": "Sách Ma-la-chi" + }, + "40": { + "chapterCount": "28", + "standardName": "Ma-thi-ơ", + "standardAbbreviation": "Mat", + "officialAbbreviation": "Mat", + "standardSingularBookName": "Ma-thi-ơ", + "standardSingularAbbreviation": "Mat", + "officialSingularAbbreviation": "Mat", + "standardPluralBookName": "Ma-thi-ơ", + "standardPluralAbbreviation": "Mat", + "officialPluralAbbreviation": "Mat", + "bookDisplayTitle": "Tin mừng do Ma-thi-ơ ghi lại" + }, + "41": { + "chapterCount": "16", + "standardName": "Mác", + "standardAbbreviation": "Mác", + "officialAbbreviation": "Mác", + "standardSingularBookName": "Mác", + "standardSingularAbbreviation": "Mác", + "officialSingularAbbreviation": "Mác", + "standardPluralBookName": "Mác", + "standardPluralAbbreviation": "Mác", + "officialPluralAbbreviation": "Mác", + "bookDisplayTitle": "Tin mừng do Mác ghi lại" + }, + "42": { + "chapterCount": "24", + "standardName": "Lu-ca", + "standardAbbreviation": "Lu", + "officialAbbreviation": "Lu", + "standardSingularBookName": "Lu-ca", + "standardSingularAbbreviation": "Lu", + "officialSingularAbbreviation": "Lu", + "standardPluralBookName": "Lu-ca", + "standardPluralAbbreviation": "Lu", + "officialPluralAbbreviation": "Lu", + "bookDisplayTitle": "Tin mừng do Lu-ca ghi lại" + }, + "43": { + "chapterCount": "21", + "standardName": "Giăng", + "standardAbbreviation": "Giăng", + "officialAbbreviation": "Gi", + "standardSingularBookName": "Giăng", + "standardSingularAbbreviation": "Giăng", + "officialSingularAbbreviation": "Gi", + "standardPluralBookName": "Giăng", + "standardPluralAbbreviation": "Giăng", + "officialPluralAbbreviation": "Gi", + "bookDisplayTitle": "Tin mừng do Giăng ghi lại" + }, + "44": { + "chapterCount": "28", + "standardName": "Công vụ", + "standardAbbreviation": "Công", + "officialAbbreviation": "Cv", + "standardSingularBookName": "Công vụ", + "standardSingularAbbreviation": "Công", + "officialSingularAbbreviation": "Cv", + "standardPluralBookName": "Công vụ", + "standardPluralAbbreviation": "Công", + "officialPluralAbbreviation": "Cv", + "bookDisplayTitle": "Công vụ các sứ đồ" + }, + "45": { + "chapterCount": "16", + "standardName": "Rô-ma", + "standardAbbreviation": "Rô", + "officialAbbreviation": "Rô", + "standardSingularBookName": "Rô-ma", + "standardSingularAbbreviation": "Rô", + "officialSingularAbbreviation": "Rô", + "standardPluralBookName": "Rô-ma", + "standardPluralAbbreviation": "Rô", + "officialPluralAbbreviation": "Rô", + "bookDisplayTitle": "Thư gửi tín đồ ở Rô-ma" + }, + "46": { + "chapterCount": "16", + "standardName": "1 Cô-rinh-tô", + "standardAbbreviation": "1 Cô", + "officialAbbreviation": "1Cô", + "standardSingularBookName": "1 Cô-rinh-tô", + "standardSingularAbbreviation": "1 Cô", + "officialSingularAbbreviation": "1Cô", + "standardPluralBookName": "1 Cô-rinh-tô", + "standardPluralAbbreviation": "1 Cô", + "officialPluralAbbreviation": "1Cô", + "bookDisplayTitle": "Thư thứ nhất gửi tín đồ ở Cô-rinh-tô" + }, + "47": { + "chapterCount": "13", + "standardName": "2 Cô-rinh-tô", + "standardAbbreviation": "2 Cô", + "officialAbbreviation": "2Cô", + "standardSingularBookName": "2 Cô-rinh-tô", + "standardSingularAbbreviation": "2 Cô", + "officialSingularAbbreviation": "2Cô", + "standardPluralBookName": "2 Cô-rinh-tô", + "standardPluralAbbreviation": "2 Cô", + "officialPluralAbbreviation": "2Cô", + "bookDisplayTitle": "Thư thứ hai gửi tín đồ ở Cô-rinh-tô" + }, + "48": { + "chapterCount": "6", + "standardName": "Ga-la-ti", + "standardAbbreviation": "Ga", + "officialAbbreviation": "Ga", + "standardSingularBookName": "Ga-la-ti", + "standardSingularAbbreviation": "Ga", + "officialSingularAbbreviation": "Ga", + "standardPluralBookName": "Ga-la-ti", + "standardPluralAbbreviation": "Ga", + "officialPluralAbbreviation": "Ga", + "bookDisplayTitle": "Thư gửi tín đồ ở Ga-la-ti" + }, + "49": { + "chapterCount": "6", + "standardName": "Ê-phê-sô", + "standardAbbreviation": "Ê-phê", + "officialAbbreviation": "Êph", + "standardSingularBookName": "Ê-phê-sô", + "standardSingularAbbreviation": "Ê-phê", + "officialSingularAbbreviation": "Êph", + "standardPluralBookName": "Ê-phê-sô", + "standardPluralAbbreviation": "Ê-phê", + "officialPluralAbbreviation": "Êph", + "bookDisplayTitle": "Thư gửi tín đồ ở Ê-phê-sô" + }, + "50": { + "chapterCount": "4", + "standardName": "Phi-líp", + "standardAbbreviation": "Phi-líp", + "officialAbbreviation": "Phl", + "standardSingularBookName": "Phi-líp", + "standardSingularAbbreviation": "Phi-líp", + "officialSingularAbbreviation": "Phl", + "standardPluralBookName": "Phi-líp", + "standardPluralAbbreviation": "Phi-líp", + "officialPluralAbbreviation": "Phl", + "bookDisplayTitle": "Thư gửi tín đồ ở Phi-líp" + }, + "51": { + "chapterCount": "4", + "standardName": "Cô-lô-se", + "standardAbbreviation": "Cô", + "officialAbbreviation": "Cô", + "standardSingularBookName": "Cô-lô-se", + "standardSingularAbbreviation": "Cô", + "officialSingularAbbreviation": "Cô", + "standardPluralBookName": "Cô-lô-se", + "standardPluralAbbreviation": "Cô", + "officialPluralAbbreviation": "Cô", + "bookDisplayTitle": "Thư gửi tín đồ ở Cô-lô-se" + }, + "52": { + "chapterCount": "5", + "standardName": "1 Tê-sa-lô-ni-ca", + "standardAbbreviation": "1 Tê", + "officialAbbreviation": "1Tê", + "standardSingularBookName": "1 Tê-sa-lô-ni-ca", + "standardSingularAbbreviation": "1 Tê", + "officialSingularAbbreviation": "1Tê", + "standardPluralBookName": "1 Tê-sa-lô-ni-ca", + "standardPluralAbbreviation": "1 Tê", + "officialPluralAbbreviation": "1Tê", + "bookDisplayTitle": "Thư thứ nhất gửi tín đồ ở Tê-sa-lô-ni-ca" + }, + "53": { + "chapterCount": "3", + "standardName": "2 Tê-sa-lô-ni-ca", + "standardAbbreviation": "2 Tê", + "officialAbbreviation": "2Tê", + "standardSingularBookName": "2 Tê-sa-lô-ni-ca", + "standardSingularAbbreviation": "2 Tê", + "officialSingularAbbreviation": "2Tê", + "standardPluralBookName": "2 Tê-sa-lô-ni-ca", + "standardPluralAbbreviation": "2 Tê", + "officialPluralAbbreviation": "2Tê", + "bookDisplayTitle": "Thư thứ hai gửi tín đồ ở Tê-sa-lô-ni-ca" + }, + "54": { + "chapterCount": "6", + "standardName": "1 Ti-mô-thê", + "standardAbbreviation": "1 Ti", + "officialAbbreviation": "1Ti", + "standardSingularBookName": "1 Ti-mô-thê", + "standardSingularAbbreviation": "1 Ti", + "officialSingularAbbreviation": "1Ti", + "standardPluralBookName": "1 Ti-mô-thê", + "standardPluralAbbreviation": "1 Ti", + "officialPluralAbbreviation": "1Ti", + "bookDisplayTitle": "Thư thứ nhất gửi Ti-mô-thê" + }, + "55": { + "chapterCount": "4", + "standardName": "2 Ti-mô-thê", + "standardAbbreviation": "2 Ti", + "officialAbbreviation": "2Ti", + "standardSingularBookName": "2 Ti-mô-thê", + "standardSingularAbbreviation": "2 Ti", + "officialSingularAbbreviation": "2Ti", + "standardPluralBookName": "2 Ti-mô-thê", + "standardPluralAbbreviation": "2 Ti", + "officialPluralAbbreviation": "2Ti", + "bookDisplayTitle": "Thư thứ hai gửi Ti-mô-thê" + }, + "56": { + "chapterCount": "3", + "standardName": "Tít", + "standardAbbreviation": "Tít", + "officialAbbreviation": "Tít", + "standardSingularBookName": "Tít", + "standardSingularAbbreviation": "Tít", + "officialSingularAbbreviation": "Tít", + "standardPluralBookName": "Tít", + "standardPluralAbbreviation": "Tít", + "officialPluralAbbreviation": "Tít", + "bookDisplayTitle": "Thư gửi Tít" + }, + "57": { + "chapterCount": "1", + "standardName": "Phi-lê-môn", + "standardAbbreviation": "Phi-lê", + "officialAbbreviation": "Phlm", + "standardSingularBookName": "Phi-lê-môn", + "standardSingularAbbreviation": "Phi-lê", + "officialSingularAbbreviation": "Phlm", + "standardPluralBookName": "Phi-lê-môn", + "standardPluralAbbreviation": "Phi-lê", + "officialPluralAbbreviation": "Phlm", + "bookDisplayTitle": "Thư gửi Phi-lê-môn" + }, + "58": { + "chapterCount": "13", + "standardName": "Hê-bơ-rơ", + "standardAbbreviation": "Hê", + "officialAbbreviation": "Hê", + "standardSingularBookName": "Hê-bơ-rơ", + "standardSingularAbbreviation": "Hê", + "officialSingularAbbreviation": "Hê", + "standardPluralBookName": "Hê-bơ-rơ", + "standardPluralAbbreviation": "Hê", + "officialPluralAbbreviation": "Hê", + "bookDisplayTitle": "Thư gửi tín đồ người Hê-bơ-rơ" + }, + "59": { + "chapterCount": "5", + "standardName": "Gia-cơ", + "standardAbbreviation": "Gia", + "officialAbbreviation": "Gia", + "standardSingularBookName": "Gia-cơ", + "standardSingularAbbreviation": "Gia", + "officialSingularAbbreviation": "Gia", + "standardPluralBookName": "Gia-cơ", + "standardPluralAbbreviation": "Gia", + "officialPluralAbbreviation": "Gia", + "bookDisplayTitle": "Thư của Gia-cơ" + }, + "60": { + "chapterCount": "5", + "standardName": "1 Phi-e-rơ", + "standardAbbreviation": "1 Phi", + "officialAbbreviation": "1Ph", + "standardSingularBookName": "1 Phi-e-rơ", + "standardSingularAbbreviation": "1 Phi", + "officialSingularAbbreviation": "1Ph", + "standardPluralBookName": "1 Phi-e-rơ", + "standardPluralAbbreviation": "1 Phi", + "officialPluralAbbreviation": "1Ph", + "bookDisplayTitle": "Thư thứ nhất của Phi-e-rơ" + }, + "61": { + "chapterCount": "3", + "standardName": "2 Phi-e-rơ", + "standardAbbreviation": "2 Phi", + "officialAbbreviation": "2Ph", + "standardSingularBookName": "2 Phi-e-rơ", + "standardSingularAbbreviation": "2 Phi", + "officialSingularAbbreviation": "2Ph", + "standardPluralBookName": "2 Phi-e-rơ", + "standardPluralAbbreviation": "2 Phi", + "officialPluralAbbreviation": "2Ph", + "bookDisplayTitle": "Thư thứ hai của Phi-e-rơ" + }, + "62": { + "chapterCount": "5", + "standardName": "1 Giăng", + "standardAbbreviation": "1 Giăng", + "officialAbbreviation": "1Gi", + "standardSingularBookName": "1 Giăng", + "standardSingularAbbreviation": "1 Giăng", + "officialSingularAbbreviation": "1Gi", + "standardPluralBookName": "1 Giăng", + "standardPluralAbbreviation": "1 Giăng", + "officialPluralAbbreviation": "1Gi", + "bookDisplayTitle": "Thư thứ nhất của Giăng" + }, + "63": { + "chapterCount": "1", + "standardName": "2 Giăng", + "standardAbbreviation": "2 Giăng", + "officialAbbreviation": "2Gi", + "standardSingularBookName": "2 Giăng", + "standardSingularAbbreviation": "2 Giăng", + "officialSingularAbbreviation": "2Gi", + "standardPluralBookName": "2 Giăng", + "standardPluralAbbreviation": "2 Giăng", + "officialPluralAbbreviation": "2Gi", + "bookDisplayTitle": "Thư thứ hai của Giăng" + }, + "64": { + "chapterCount": "1", + "standardName": "3 Giăng", + "standardAbbreviation": "3 Giăng", + "officialAbbreviation": "3Gi", + "standardSingularBookName": "3 Giăng", + "standardSingularAbbreviation": "3 Giăng", + "officialSingularAbbreviation": "3Gi", + "standardPluralBookName": "3 Giăng", + "standardPluralAbbreviation": "3 Giăng", + "officialPluralAbbreviation": "3Gi", + "bookDisplayTitle": "Thư thứ ba của Giăng" + }, + "65": { + "chapterCount": "1", + "standardName": "Giu-đe", + "standardAbbreviation": "Giu", + "officialAbbreviation": "Giu", + "standardSingularBookName": "Giu-đe", + "standardSingularAbbreviation": "Giu", + "officialSingularAbbreviation": "Giu", + "standardPluralBookName": "Giu-đe", + "standardPluralAbbreviation": "Giu", + "officialPluralAbbreviation": "Giu", + "bookDisplayTitle": "Thư của Giu-đe" + }, + "66": { + "chapterCount": "22", + "standardName": "Khải huyền", + "standardAbbreviation": "Khải", + "officialAbbreviation": "Kh", + "standardSingularBookName": "Khải huyền", + "standardSingularAbbreviation": "Khải", + "officialSingularAbbreviation": "Kh", + "standardPluralBookName": "Khải huyền", + "standardPluralAbbreviation": "Khải", + "officialPluralAbbreviation": "Kh", + "bookDisplayTitle": "Sách Khải huyền" + } + } +} diff --git a/blockchain/certikrewards b/blockchain/certikrewards deleted file mode 100755 index 6d1b8c3..0000000 --- a/blockchain/certikrewards +++ /dev/null @@ -1,132 +0,0 @@ -#!/bin/bash -# https://www.majlovesreg.one/tag/code/ -# 2021.04.05 - -source $HOME/.bashrc -source $HOME/.profile - -[ "$(certikcli status | jq '.sync_info.catching_up')" = "false" ] || errx "certikd not running or still catching up..." 1 - -############################################################################################# - -walletname='' -walletaddr='{certik1...}' - -valaddr='{certikvaloper1...}' - -memo="$(date)" - -fee='' - -blktime=$(( 6 * 3 )) # in seconds - -# extnode='tcp://xxx.xxx.xxx.xxx:26657' -locnode='tcp://localhost:26657' -extnode=${locnode} - -ctk_wallets='/path/to/wallets/list' -logfile='/tmp/redelegate_logs' - -z=1000000 # uCTK to CTK - -# Values below in CTK -w_baseamt=1 -min_withdraw=1 -min_redelegate=1 -min_send=1 - -############################################################################################# - -######################### -### Validator rewards ### -######################### - -function validator_rewards () { - validator_amount=$(certikcli q distribution commission ${valaddr} -o json --node ${locnode}) - [ "${validator_amount}" != "null" ] && { - vr=$(echo "${validator_amount}" | jq -r '.[].amount' | grep -o '^[0-9]\+') - (( vr > min_withdraw * z )) && { - txhash_validator_rewards=$(certikcli tx distribution withdraw-rewards ${valaddr} --from ${walletname} --memo "${memo}" --commission --fees "${fee}" -y -o json --node ${extnode} | jq -r '.txhash') && sleep $(( blktime * 3 )) - } - } -} - -validator_rewards - - -###################### -### Wallet rewards ### -###################### - -function wallet_rewards () { - wallet_amount=$(certikcli q distribution rewards ${walletaddr} -o json --node ${locnode}) - [ "${wallet_amount}" != "null" ] && { - wr=$(echo "${wallet_amount}" | jq -r '.total[].amount' | grep -o '^[0-9]\+') - - (( wr >= min_withdraw * z )) && { - txhash_wallet_rewards=$(certikcli tx distribution withdraw-all-rewards --from ${walletname} --memo "${memo}" --fees "${fee}" -y -o json --node ${extnode} | jq -r '.txhash') && sleep $(( blktime * 3 )) - } - } -} - -wallet_rewards - - -################## -### Redelegate ### -################## - -function certik_redelegate () { - w_now=$(certikcli q account ${walletaddr} -o json --node ${locnode} | jq -r '.value.coins[].amount') - - redelegate=$(( w_now - w_baseamt * z -1 )) - - (( redelegate > min_redelegate * z )) && { - txhash_redelegate=$(certikcli tx staking delegate ${valaddr} ${redelegate}uctk --from ${walletname} --memo "${memo}" --fees "${fee}" -y -o json --node ${extnode} | jq -r '.txhash') && sleep $(( blktime * 3 )) - } -} - -certik_redelegate - - -###################### -### Send to wallet ### -###################### - -function send_to_wallet () { - source ${ctk_wallets} - send_wallet=${wallet01} - send_memo=${memo01} - - [ "${send_wallet}" ] || errx "No wallet to send found!" 2 - [ "${send_memo}" ] || errx "No wallet memo found!" 3 - - available=$(certikcli q account ${walletaddr} -o json --node ${locnode} | jq -r '.value.coins[].amount') - send_amt=$(( available - 1 - w_baseamt * z )) - - (( send_amt > min_send * z )) && { - txhash_send=$(certikcli tx send ${walletaddr} ${send_wallet} ${send_amt}uctk --memo ${send_memo} --fees "${fee}" -y -o json --node ${extnode} | jq -r '.txhash') && sleep $(( blktime * 3 )) - } -} - -# send_to_wallet - - -##################### -### Check results ### -##################### - -function log_tx () { - log_tmp=$(mktemp) - [ -f ${logfile} ] && xz -dc ${logfile} > ${log_tmp} || echo "$(date) - initialized log" > ${log_tmp} - - [ "${txhash_wallet_rewards}" ] && sed -i "1i$(date) - withdraw wallet rewards - ${txhash_wallet_rewards}" ${log_tmp} - [ "${txhash_validator_rewards}" ] && sed -i "1i$(date) - withdraw validator rewards - ${txhash_validator_rewards}" ${log_tmp} - [ "${txhash_redelegate}" ] && sed -i "1i$(date) - delegate - ${txhash_redelegate}" ${log_tmp} - [ "${txhash_send}" ] && sed -i "1i$(date) - sent ctk - ${txhash_send}" ${log_tmp} - - xz -zc ${log_tmp} > ${logfile} - rm ${log_tmp} -} - -log_tx diff --git a/maj-source b/maj-source new file mode 100644 index 0000000..365c733 --- /dev/null +++ b/maj-source @@ -0,0 +1,96 @@ +##### Majal's bash source functions ##### + +### COLORS ### + +function echo-rb () { + COLOR='\033[1;91m' + NC='\033[0m' + printf "${COLOR}$1${NC}\n" +} + +function echo-r () { + COLOR='\033[91m' + NC='\033[0m' + printf "${COLOR}$1${NC}\n" +} + +function echo-gb () { + COLOR='\033[1;92m' + NC='\033[0m' + printf "${COLOR}$1${NC}\n" +} + +function echo-g () { + COLOR='\033[92m' + NC='\033[0m' + printf "${COLOR}$1${NC}\n" +} + +function echo-yb () { + COLOR='\033[1;93m' + NC='\033[0m' + printf "${COLOR}$1${NC}\n" +} + +function echo-y () { + COLOR='\033[93m' + NC='\033[0m' + printf "${COLOR}$1${NC}\n" +} + +function echo-bb () { + COLOR='\033[1;94m' + NC='\033[0m' + printf "${COLOR}$1${NC}\n" +} + +function echo-b () { + COLOR='\033[94m' + NC='\033[0m' + printf "${COLOR}$1${NC}\n" +} + + +### FUNCTIONS ### +# errx +# runroot +# unique_script +# checkonline +# majbanner + +function errx () { + echo-r "$1" + echo-y "Exiting with error code: $2" + echo + exit $2 +} + +function runroot () { + [ $EUID -ne 0 ] && { echo; exec /usr/bin/sudo "$0" "$@"; } +} + +function unique_script () { + instancecount=$(pgrep -xc $(echo $(basename "${0}") | head -c 15)) + [ "${instancecount}" ] && [ "${instancecount}" -gt 1 ] && errx "$(basename ${0}): Multiple instances (${instancecount}) found, exiting..." 0 +} + +function maj-online () { + ipaddr='8.8.8.8' + $([ -z "`ping -c1 $ipaddr |& grep -o 'Network is unreachable'`" ] || exit 1; [ -z "`ping -c3 $ipaddr |& grep -o '100% packet loss'`" ] && exit 0 || exit 2) +} + +function checkonline () { + printf "Checking connectivity... " + maj-online && echo-g "online." || errx "offline." 102 +} + +function majbanner () { + echo + echo -e " Running Maj script: \e[1;93m`basename $0`\e[0m" + echo-y " _____ _____ _____" + echo +} + +### BANNER ### + +[ $EUID -eq 0 ] || majbanner diff --git a/pdflat b/pdflat old mode 100644 new mode 100755 index a9a6499..c36ef41 --- a/pdflat +++ b/pdflat @@ -1,7 +1,10 @@ #!/bin/bash -[[ -z "$1" ]] && echo "Please enter a filename. Exiting..." -[[ -z "$1" ]] && exit 1 +[ -z "$1" ] && echo "Please enter a filename. Exiting..." +[ -z "$1" ] && exit 1 + +dir="$(mktemp -ud | sed 's/tmp\./pdflat./')" +[ -d "${dir}" ] || mkdir "${dir}" echo echo -e "\e[1mThis will flatten the following PDFs:\e[0m" @@ -14,13 +17,26 @@ echo -e "\e[1m\e[32mPress [Enter] to continue... \e[31m[Ctrl+C to cancel]\e[0m" read printf "Flattening... " -for a in "$@"; do mv "$a" "${a%.pdf}.orig.pdf"; done +for a in "$@"; do mv "${a}" "${dir}/${a}"; done -for b in *.orig.pdf; do cc=$((cc+1)); printf "\rFlattening... $cc of $c"; gs -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite -sColorConversionStrategy=/LeaveColorUnchanged -dAutoFilterColorImages=true -dAutoFilterGrayImages=true -dDownsampleMonoImages=true -dDownsampleGrayImages=true -dDownsampleColorImages=true -sOutputFile="${b%.orig.pdf}.pdf" "$b"; done +for b in "${dir}/"*".pdf"; do + cc=$((cc+1)) + printf "\rFlattening... $cc of $c" + gs -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite -dPreserveAnnots=false -sOutputFile="$(basename "${b}")" "$b" +done -[[ -d ./orig ]] || mkdir orig -mv *.orig.pdf orig/ echo ". Done." echo -echo "Originals moved to orig folder" + +echo -e "Originals can be found here: \e[93m${dir}\e[0m" +echo +echo -ne "\e[32mMove ${dir} to \"orig\" folder? [y/N] \e[0m" +read yn echo + +[[ "${yn,,}" == y* ]] && { + [ -d orig ] || mkdir orig + rsync -a "${dir}/" orig/ && rm -r "${dir}" + echo "Moved ${dir} to orig, done." + echo +} diff --git a/pdflat-auto b/pdflat-auto new file mode 100755 index 0000000..1cbe8c2 --- /dev/null +++ b/pdflat-auto @@ -0,0 +1,18 @@ +#!/bin/bash + +dir="$(mktemp -ud | sed 's/tmp\./pdflat./')" +[ -d "${dir}" ] || mkdir "${dir}" + +for a in *.pdf; do mv "${a}" "${dir}/${a}"; done + +for b in "${dir}/"*".pdf"; do + cc=$((cc+1)) + printf "\rFlattening... $cc of $c" + gs -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite -dPreserveAnnots=false -sOutputFile="$(basename "${b}")" "$b" +done + +echo ". Done." +echo + +[ -d orig ] || mkdir orig +rsync -a "${dir}/" orig/ && rm -r "${dir}" diff --git a/pdflat-single b/pdflat-single new file mode 100755 index 0000000..3399d86 --- /dev/null +++ b/pdflat-single @@ -0,0 +1,13 @@ +#!/bin/bash + +[ -z "${1}" ] && exit 1 + +full=$(echo "${1}" | tr -d '\n') +dir=$(dirname "${full}") +base=$(basename "${full}") + +mkdir -p "${dir}/orig" +cp "${full}" "${dir}/orig" + +gs -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite -dPreserveAnnots=false \ + -sOutputFile="${full}" "${dir}/orig/${base}"