Add translation-aware passage queries

This commit is contained in:
2026-06-14 08:46:34 -05:00
parent 42d2587704
commit 176fa46816
4 changed files with 131 additions and 17 deletions
+22 -17
View File
@@ -10,6 +10,7 @@ import ./api_bible
import ./esv
import ./kjv
import ./mev
import ./passage_query
proc formatMarkdown(raw, translation: string): string =
var reference = ""
@@ -95,7 +96,7 @@ proc fetchPassages(reference, translation: string, cfg: CombinedConfig): seq[str
else:
raise newException(ValueError,
"unsupported translation '" & translation &
"'; supported translations: akjv, amp, esv, kjv, mev, nkjv, niv")
"'; supported translations: " & supportedTranslationsList())
when isMainModule:
const USAGE = """Usage:
@@ -115,6 +116,9 @@ Options:
Select a specific translation. Supported values
are 'akjv', 'amp', 'esv', 'kjv', 'mev',
'nkjv', and 'niv'. Defaults to 'esv'.
Individual references may override this with a
trailing marker, for example:
'John 3:16 (KJV); John 3:16 (ESV)'.
--esv-api-token <token> Provide the API token on the command line. By
default this will be read either from the
@@ -156,24 +160,25 @@ Options:
cfgFileJson = parseFile(cfgFilePath)
let cfg = CombinedConfig(docopt: args, json: cfgFileJson)
let translation = cfg.getVal("translation", "esv").strip.toLowerAscii
let defaultTranslation = cfg.getVal("translation", "esv")
let reference = $args["<reference>"]
let queries = parsePassageQueries(reference, defaultTranslation)
let passages = fetchPassages(reference, translation, cfg)
let formattedPassages =
case $args["--output-format"]:
of "plain":
passages --> map(formatPlain(it, translation))
of "reading":
passages -->
map(formatPlain(it, translation, keepVerseNumbers = false))
of "text":
passages -->
map(it.multiReplace([(re"\[(\d+)\]", "$1")]))
of "raw": passages
else:
passages --> map(formatMarkdown(it, translation))
var formattedPassages: seq[string] = @[]
for query in queries:
for passage in fetchPassages(query.referenceText, query.translation, cfg):
formattedPassages.add(
case $args["--output-format"]:
of "plain":
formatPlain(passage, query.translation)
of "reading":
formatPlain(passage, query.translation, keepVerseNumbers = false)
of "text":
passage.multiReplace([(re"\[(\d+)\]", "$1")])
of "raw":
passage
else:
formatMarkdown(passage, query.translation))
echo formattedPassages.join("\p\p")