From 7d87f0239730f681e943e3822f99b2baed001632 Mon Sep 17 00:00:00 2001 From: Samuel Sloniker Date: Sat, 4 Jun 2022 14:42:19 -0700 Subject: [PATCH] initial commit --- verse.py | 500 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 500 insertions(+) create mode 100755 verse.py diff --git a/verse.py b/verse.py new file mode 100755 index 0000000..f3f1f1f --- /dev/null +++ b/verse.py @@ -0,0 +1,500 @@ +#!/usr/bin/env python3 + +# verse.py - Bible Verse of the Day + +# Copyright (C) 2022 Samuel Sloniker + +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU Affero General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. + +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +# details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import json +import os +import datetime +import subprocess + +verses = [ + [ + # January + "Genesis1:1-3", + "Romans6:20-23", + "2Timothy3:16-18", + "2Peter3:10-11", + "2Peter3:12-14", + "Colossians1:16-17", + "Colossians3:23-25", + "Revelation3:20-21", + "Philippians4:6-7", + "Philippians4:8-9", + "John3:13-15", + "John3:16-17", + "Hebrews12:1-2", + "1Corinthians13:3-4", + "2Corinthians12:9-10", + "1John1:8-10", + "Matthew28:18-19", + "Joshua24:14-16", + "Romans12:19-21", + "Luke23:42-43", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # February + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # March + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # April + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # May + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # June + "Hebrews11:1-3", + "1Chronicles29:11-13", + "2Timothy2:15-16", + "1Timothy1:4-7", + "1Corinthians13:1-3", + "1Corinthians13:4-7", + "1Corinthians13:8-10", + "1Corinthians13:11-13", + "Psalm37:1-3", + "Psalm37:4-6", + "Psalm37:7-10", + "Revelation3:14-16", + "Revelation3:17-18", + "Revelation3:19-22", + "John14:1-3", + "John14:4-6", + "John20:27-29", + "1Corinthians2:12-13", + "1Corinthians2:14-16", + "Psalm97:10-12", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # July + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # August + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # September + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # October + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # November + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], + [ + # December + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + "John3:16", + ], +] + + +def get_reference(): + date = datetime.datetime.now() + return verses[date.month - 1][date.day - 1] + + +def get_verse(length=0): + return ( + str( + subprocess.run( + ["bible", f"-l{length}", get_reference()], capture_output=True + ).stdout, + "utf-8", + ) + .replace("Psalms", "Psalm") + .replace("Obadiah 1", "Obadiah") + .replace("Philemon 1", "Philemon") + .replace("2 John 1", "2 John") + .replace("3 John 1", "3 John") + .replace("Jude 1", "Jude") + ) + + +def to_html( + text, + container_tag="div", + chapter_tag="h2", + container_class="votd", + chapter_class="chapter", + verse_class="verse", + indent_string=" ", + indent_level=0, +): + lines = (i for i in text.split("\n") if i.strip()) + + html_lines = [ + f'{indent_string*indent_level}<{container_tag} class="{container_class}">\n', + ] + + for line in lines: + if line.startswith(" "): + if not html_lines[-1].strip()[:3] in ["\n") + + number, text = line.strip().split(" ", 1) + html_lines.append( + f'{indent_string*(indent_level+2)}
  • {text}
  • \n' + ) + else: + if html_lines[-1].strip()[:3] in ["\n") + + html_lines.append( + f'{indent_string*(indent_level+1)}<{chapter_tag} class="{chapter_class}">{line.strip()}\n' + ) + + if html_lines[-1].strip()[:3] in ["\n") + + html_lines.append(f"{indent_string*indent_level}\n") + + html = "".join(html_lines) + + return html + + +def html_verse(**kwargs): + return to_html(get_verse(), **kwargs) + +if __name__ == '__main__': + print(get_verse(min(os.get_terminal_size().columns, 120)))