commit 52e434b3e351fffec2335ae3698aa1ff03275f1f
parent e7c870cf962cc5a5d81e0aa82dda60d1ff84c367
Author: Sivaldo <gxixtx@xsxixvxaxlxdxoxdxaxvxix.xcxoxm>
Date: Mon, 10 Aug 2026 15:51:21 -0300
feat(culto): migra fonte de dados da Bíblia para json e suporta abreviações
Diffstat:
1 file changed, 22 insertions(+), 13 deletions(-)
diff --git a/.local/bin/culto b/.local/bin/culto
@@ -5,7 +5,7 @@
# ==============================================================================
CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}"
-BIBLE_FILE="$CACHE_DIR/biblia"
+BIBLE_FILE="$CACHE_DIR/biblia.json"
MUSICAS_FILE="$CACHE_DIR/musicas.json"
PIX_FILE="$CACHE_DIR/pix-igreja.png"
AGENDA_FILE="$CACHE_DIR/agenda.jpeg"
@@ -53,7 +53,7 @@ _ensure_bible() {
_bible_python() {
BIBLE_FILE="$BIBLE_FILE" python3 - "$@" <<'PYEOF'
-import os, re, sys, signal
+import os, re, sys, signal, json
# Ignora erro de Broken Pipe quando pipeamos pro fzf ou less
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
@@ -71,15 +71,24 @@ def vermelho(t): return _c("1;31", t)
def load_bible():
verses = []
with open(BIBLE_FILE, encoding="utf-8") as f:
- for line in f:
- line = line.strip()
- if not line or line in ("ERV", "English Revised Version"):
- continue
- m = re.match(r"^([\w\s]+)\s+(\d+):(\d+)\t(.+)$", line)
- if m:
- book, chapter, verse, text = m.groups()
- verses.append({"book": book, "chapter": int(chapter),
- "verse": int(verse), "text": text})
+ data = json.load(f)
+ for book_obj in data:
+ book_name = book_obj.get("name", "")
+ book_abbrev = book_obj.get("abbrev", "")
+
+ for cap_idx, chapter in enumerate(book_obj.get("chapters", [])):
+ cap_num = cap_idx + 1
+
+ for vers_idx, text in enumerate(chapter):
+ vers_num = vers_idx + 1
+
+ verses.append({
+ "book": book_name,
+ "abbrev": book_abbrev,
+ "chapter": cap_num,
+ "verse": vers_num,
+ "text": text
+ })
return verses
def parse_ref(query, verses):
@@ -97,13 +106,13 @@ def parse_ref(query, verses):
else:
v1 = v2 = int(vrs_part)
return [v for v in verses
- if v["book"].lower().startswith(book.lower())
+ if (v["book"].lower().startswith(book.lower()) or v["abbrev"].lower() == book.lower())
and v["chapter"] == cap_num
and v1 <= v["verse"] <= v2]
else:
cap_num = int(num) if num.isdigit() else 0
return [v for v in verses
- if v["book"].lower().startswith(book.lower())
+ if (v["book"].lower().startswith(book.lower()) or v["abbrev"].lower() == book.lower())
and (cap_num == 0 or v["chapter"] == cap_num)]
except ValueError:
return []