biblemategui 0.0.12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. biblemategui-0.0.12/PKG-INFO +82 -0
  2. biblemategui-0.0.12/biblemategui/README.md +42 -0
  3. biblemategui-0.0.12/biblemategui/__init__.py +14 -0
  4. biblemategui-0.0.12/biblemategui/config.py +0 -0
  5. biblemategui-0.0.12/biblemategui/css/original.py +330 -0
  6. biblemategui-0.0.12/biblemategui/eliranwong.jpg +0 -0
  7. biblemategui-0.0.12/biblemategui/fx/bible.py +15 -0
  8. biblemategui-0.0.12/biblemategui/fx/original.py +44 -0
  9. biblemategui-0.0.12/biblemategui/js/bible.py +24 -0
  10. biblemategui-0.0.12/biblemategui/js/original.py +44 -0
  11. biblemategui-0.0.12/biblemategui/js/sync_scrolling.py +116 -0
  12. biblemategui-0.0.12/biblemategui/main.py +80 -0
  13. biblemategui-0.0.12/biblemategui/package_name.txt +1 -0
  14. biblemategui-0.0.12/biblemategui/pages/README.md +11 -0
  15. biblemategui-0.0.12/biblemategui/pages/ai/chat.py +96 -0
  16. biblemategui-0.0.12/biblemategui/pages/bibles/original_discourse.py +138 -0
  17. biblemategui-0.0.12/biblemategui/pages/bibles/original_interlinear.py +138 -0
  18. biblemategui-0.0.12/biblemategui/pages/bibles/original_linguistic.py +139 -0
  19. biblemategui-0.0.12/biblemategui/pages/bibles/original_parallel.py +139 -0
  20. biblemategui-0.0.12/biblemategui/pages/bibles/original_reader.py +139 -0
  21. biblemategui-0.0.12/biblemategui/pages/home.py +637 -0
  22. biblemategui-0.0.12/biblemategui/pages/tools/audio.py +139 -0
  23. biblemategui-0.0.12/biblemategui/pages/tools/chronology.py +343 -0
  24. biblemategui-0.0.12/biblemategui/requirements.txt +2 -0
  25. biblemategui-0.0.12/biblemategui/version.txt +1 -0
  26. biblemategui-0.0.12/biblemategui.egg-info/PKG-INFO +82 -0
  27. biblemategui-0.0.12/biblemategui.egg-info/SOURCES.txt +31 -0
  28. biblemategui-0.0.12/biblemategui.egg-info/dependency_links.txt +1 -0
  29. biblemategui-0.0.12/biblemategui.egg-info/entry_points.txt +3 -0
  30. biblemategui-0.0.12/biblemategui.egg-info/requires.txt +5 -0
  31. biblemategui-0.0.12/biblemategui.egg-info/top_level.txt +1 -0
  32. biblemategui-0.0.12/setup.cfg +4 -0
  33. biblemategui-0.0.12/setup.py +109 -0
@@ -0,0 +1,82 @@
1
+ Metadata-Version: 2.4
2
+ Name: biblemategui
3
+ Version: 0.0.12
4
+ Summary: BibleMate AI - Automate Your Bible Study
5
+ Home-page: https://biblemate.ai
6
+ Author: Eliran Wong
7
+ Author-email: support@marvel.bible
8
+ License: GNU General Public License (GPL)
9
+ Project-URL: Source, https://github.com/eliranwong/biblemategui
10
+ Project-URL: Tracker, https://github.com/eliranwong/biblemategui/issues
11
+ Project-URL: Documentation, https://github.com/eliranwong/biblemategui/wiki
12
+ Project-URL: Funding, https://www.paypal.me/MarvelBible
13
+ Keywords: mcp agent biblemate ai anthropic azure chatgpt cohere deepseek genai github googleai groq llamacpp mistral ollama openai vertexai xai
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Intended Audience :: End Users/Desktop
16
+ Classifier: Topic :: Utilities
17
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
+ Classifier: Topic :: Software Development :: Build Tools
19
+ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Requires-Python: >=3.10, <3.13
24
+ Requires-Dist: biblemate
25
+ Requires-Dist: nicegui
26
+ Provides-Extra: genai
27
+ Requires-Dist: google-genai>=1.46.0; extra == "genai"
28
+ Dynamic: author
29
+ Dynamic: author-email
30
+ Dynamic: classifier
31
+ Dynamic: description
32
+ Dynamic: home-page
33
+ Dynamic: keywords
34
+ Dynamic: license
35
+ Dynamic: project-url
36
+ Dynamic: provides-extra
37
+ Dynamic: requires-dist
38
+ Dynamic: requires-python
39
+ Dynamic: summary
40
+
41
+ # BibleMate AI Web
42
+
43
+ BibleMate AI Web Application - Web UI
44
+
45
+ BibleMate AI Web Version is designed to combine the most valuable features from the following two projects into a single, unified web interface:
46
+
47
+ https://github.com/eliranwong/biblemate
48
+
49
+ and
50
+
51
+ https://github.com/eliranwong/UniqueBible
52
+
53
+ # Development in Progress ...
54
+
55
+ Install for testing:
56
+
57
+ > pip install --upgrade biblemategui
58
+
59
+ Run:
60
+
61
+ > biblemategui
62
+
63
+ ## Recent Updates
64
+
65
+ [Cross-Highlighting & Synchronized Scrolling](https://youtu.be/TDyT1ioesmY)
66
+
67
+ [![Watch the video](https://img.youtube.com/vi/TDyT1ioesmY/maxresdefault.jpg)](https://youtu.be/TDyT1ioesmY)
68
+
69
+ [UI Overview](https://youtu.be/UL8b1O97560)
70
+
71
+ [![Watch the video](https://img.youtube.com/vi/UL8b1O97560/maxresdefault.jpg)](https://youtu.be/UL8b1O97560)
72
+
73
+ ## Use Existing UniqueBible App Data
74
+
75
+ ```
76
+ cd
77
+ mkdir biblemate
78
+ cd biblemate
79
+ ln -s ../UniqueBible/marvelData data
80
+ cd data
81
+ eliran@ai-desk:~/biblemate/data$ ln -s ../../UniqueBible/audio/ audio
82
+ ```
@@ -0,0 +1,42 @@
1
+ # BibleMate AI Web
2
+
3
+ BibleMate AI Web Application - Web UI
4
+
5
+ BibleMate AI Web Version is designed to combine the most valuable features from the following two projects into a single, unified web interface:
6
+
7
+ https://github.com/eliranwong/biblemate
8
+
9
+ and
10
+
11
+ https://github.com/eliranwong/UniqueBible
12
+
13
+ # Development in Progress ...
14
+
15
+ Install for testing:
16
+
17
+ > pip install --upgrade biblemategui
18
+
19
+ Run:
20
+
21
+ > biblemategui
22
+
23
+ ## Recent Updates
24
+
25
+ [Cross-Highlighting & Synchronized Scrolling](https://youtu.be/TDyT1ioesmY)
26
+
27
+ [![Watch the video](https://img.youtube.com/vi/TDyT1ioesmY/maxresdefault.jpg)](https://youtu.be/TDyT1ioesmY)
28
+
29
+ [UI Overview](https://youtu.be/UL8b1O97560)
30
+
31
+ [![Watch the video](https://img.youtube.com/vi/UL8b1O97560/maxresdefault.jpg)](https://youtu.be/UL8b1O97560)
32
+
33
+ ## Use Existing UniqueBible App Data
34
+
35
+ ```
36
+ cd
37
+ mkdir biblemate
38
+ cd biblemate
39
+ ln -s ../UniqueBible/marvelData data
40
+ cd data
41
+ eliran@ai-desk:~/biblemate/data$ ln -s ../../UniqueBible/audio/ audio
42
+ ```
@@ -0,0 +1,14 @@
1
+ from pathlib import Path
2
+ import os
3
+
4
+ BIBLEMATEGUI_APP_DIR = os.path.dirname(os.path.realpath(__file__))
5
+ BIBLEMATEGUI_USER_DIR = os.path.join(os.path.expanduser("~"), "biblemate")
6
+ BIBLEMATEGUI_DATA = os.path.join(os.path.expanduser("~"), "biblemate", "data")
7
+ if not os.path.isdir(BIBLEMATEGUI_USER_DIR):
8
+ Path(BIBLEMATEGUI_USER_DIR).mkdir(parents=True, exist_ok=True)
9
+ BIBLEMATEGUI_DATA_CUSTOM = os.path.join(os.path.expanduser("~"), "biblemate", "data_custom")
10
+ if not os.path.isdir(BIBLEMATEGUI_DATA_CUSTOM):
11
+ Path(BIBLEMATEGUI_DATA_CUSTOM).mkdir(parents=True, exist_ok=True)
12
+ for i in ("audio", "bibles"):
13
+ if not os.path.isdir(os.path.join(BIBLEMATEGUI_DATA, i)):
14
+ Path(os.path.join(BIBLEMATEGUI_DATA, i)).mkdir(parents=True, exist_ok=True)
File without changes
@@ -0,0 +1,330 @@
1
+ ORIGINAL_CSS = """
2
+ <style>
3
+ /* Each verse acts as a container for word blocks */
4
+ verse {
5
+ display: block;
6
+ margin-bottom: 20px;
7
+ line-height: 1.3;
8
+ }
9
+ /* The interlinear word block container */
10
+ .int {
11
+ display: inline-block;
12
+ vertical-align: top;
13
+ text-align: center;
14
+ margin: 0 4px 10px 4px;
15
+ padding: 4px 8px;
16
+ background: white;
17
+ border-radius: 6px;
18
+ box-shadow: 0 2px 4px rgba(0,0,0,0.05);
19
+ border: 1px solid #eee;
20
+ transition: background-color 0.2s; /* Smooth highlight transition */
21
+ }
22
+ /* Target all block elements inside .int to tighten their spacing */
23
+ .int > *, .int > ref > * {
24
+ line-height: 1.1;
25
+ margin-top: 1px;
26
+ margin-bottom: 1px;
27
+ }
28
+ /* Hover effects for interactive elements (even if JS isn't active here) */
29
+ .int:hover {
30
+ background-color: #f8fbff;
31
+ border-color: #d6eaf8;
32
+ }
33
+
34
+ /* Transliteration Layers (Phonetic & SBL) - shared with Greek*/
35
+ wsbl, wphono {
36
+ direction: ltr;
37
+ display: block;
38
+ font-size: 0.8rem;
39
+ color: #7f8c8d;
40
+ font-style: italic;
41
+ }
42
+ /* Morphology Layer */
43
+ wmorph {
44
+ direction: ltr;
45
+ display: block;
46
+ font-family: monospace;
47
+ font-size: 0.7rem;
48
+ color: #27ae60;
49
+ cursor: pointer;
50
+ }
51
+ wsn {
52
+ direction: ltr;
53
+ display: block;
54
+ font-size: 0.7rem;
55
+ color: #8e44ad;
56
+ cursor: pointer;
57
+ }
58
+ /* Gloss (Literal Meaning) Layer */
59
+ wgloss {
60
+ direction: ltr;
61
+ display: block;
62
+ font-size: 0.85rem;
63
+ color: #d35400;
64
+ }
65
+ /* Final Translation Layer */
66
+ wtrans {
67
+ direction: ltr;
68
+ display: block;
69
+ margin-top: 4px;
70
+ padding-top: 3px;
71
+ border-top: 1px solid #f0f0f0;
72
+ font-size: 0.95rem;
73
+ font-weight: bold;
74
+ color: #2980b9;
75
+ min-height: 1.2em; /* Ensures empty translations don't collapse the block */
76
+ }
77
+
78
+ /* UBA css */
79
+ external {
80
+ font-size: 80%;
81
+ }
82
+ red, z {
83
+ color: red;
84
+ }
85
+ blu {
86
+ color: blue;
87
+ font-size: 80%;
88
+ }
89
+ points {
90
+ color: gray;
91
+ font-weight: bold;
92
+ font-size: 80%;
93
+ }
94
+ bb {
95
+ color: brown;
96
+ font-weight: bold;
97
+ }
98
+ hp {
99
+ color: brown;
100
+ font-weight: bold;
101
+ font-size: 80%;
102
+ }
103
+ highlight {
104
+ font-style: italic;
105
+ }
106
+ transliteration {
107
+ color: gray;
108
+ }
109
+ div.section, div.point {
110
+ display: block;
111
+ border: 1px solid green;
112
+ border-radius: 5px;
113
+ padding: 2px 5px;
114
+ margin-top: 5px;
115
+ margin-bottom: 5px;
116
+ }
117
+ div.remarks {
118
+ display: block;
119
+ border: 1px solid gray;
120
+ border-radius: 5px;
121
+ padding: 2px 5px;
122
+ margin-top: 5px;
123
+ margin-bottom: 5px;
124
+ }
125
+ div.bhs, div.hebch {
126
+ direction: rtl;
127
+ }
128
+ div.info {
129
+ margin-left: 5%;
130
+ margin-right: 5%;
131
+ }
132
+ div.menu {
133
+ margin-left: 2%;
134
+ margin-right: 2%;
135
+ }
136
+ div.vword {
137
+ border: 1px solid #F5B041;
138
+ border-radius: 5px;
139
+ padding: 2px 5px;
140
+ margin-top: 3px;
141
+ margin-bottom: 3px;
142
+ }
143
+ div.translation {
144
+ border: 1px solid #9B59B6;
145
+ border-radius: 5px;
146
+ padding: 2px 5px;
147
+ margin-top: 3px;
148
+ margin-bottom: 3px;
149
+ }
150
+ div.ew {
151
+ margin-left: 5%;
152
+ margin-right: 5%;
153
+ font-size: 110%;
154
+ display: inline-block;
155
+ }
156
+ div.mr {
157
+ margin-left: 100;
158
+ }
159
+ div.nav {
160
+ margin-left: 5%;
161
+ margin-right: 5%;
162
+ }
163
+ div.refList {
164
+ display: inline;
165
+ }
166
+ /* css for linguistic annotations */
167
+
168
+ div.bhp, div.bhw, div.w, div.int {
169
+ display: inline-block;
170
+ text-align: center;
171
+ }
172
+ div.int {
173
+ vertical-align: text-top;
174
+ }
175
+ div.bhc {
176
+ direction: rtl;
177
+ border: 1px solid #9B59B6;
178
+ border-radius: 5px;
179
+ padding: 2px 5px;
180
+ margin-top: 3px;
181
+ margin-bottom: 3px;
182
+ }
183
+ div.bhp {
184
+ border: 1px solid gray;
185
+ border-radius: 5px;
186
+ padding: 2px 5px;
187
+ margin-top: 3px;
188
+ margin-bottom: 3px;
189
+ }
190
+ div.bhw {
191
+ border: 1px solid #F5B041;
192
+ border-radius: 5px;
193
+ padding: 2px 5px;
194
+ margin-top: 3px;
195
+ margin-bottom: 3px;
196
+ }
197
+ clid {
198
+ color: #641E16;
199
+ font-weight: bold;
200
+ }
201
+ mclid {
202
+ color: #641E16;
203
+ font-style: italic;
204
+ }
205
+ connector {
206
+ color: #9B59B6;
207
+ }
208
+ ckind, ctyp, crela {
209
+ color: #00008B;
210
+ display: inline-block;
211
+ }
212
+ ptyp {
213
+ text-decoration: underline;
214
+ color: gray;
215
+ }
216
+ pfunction {
217
+ color: #3498DB;
218
+ font-size: 90%;
219
+ }
220
+ det {
221
+ font-weight: bold;
222
+ }
223
+ undet {
224
+ font-style: italic;
225
+ }
226
+ prela {
227
+ display: none;
228
+ }
229
+ hbint, gntint, gloss {
230
+ direction: ltr;
231
+ vertical-align: super;
232
+ display: inline-block;
233
+ color: #D35400;
234
+ }
235
+ gntint, gloss {
236
+ font-size: 90%;
237
+ }
238
+ cllevel {
239
+ color: #9B59B6;
240
+ }
241
+ clinfo {
242
+ color: #641E16;
243
+ font-weight: bold;
244
+ }
245
+ subclinfo {
246
+ color: #641E16;
247
+ font-weight: bold;
248
+ font-size: 80%;
249
+ }
250
+ funcinfo {
251
+ color: #3498DB;
252
+ font-size: 90%;
253
+ }
254
+ wordid {
255
+ text-decoration: underline;
256
+ font-size: 80%;
257
+ color: gray;
258
+ }
259
+ cit, clt, cst, cbhs, cbsb, cleb {
260
+ display: block;
261
+ }
262
+ clt, cbsb {
263
+ color: #3498DB;
264
+ }
265
+ cst, cleb {
266
+ color: #00008B;
267
+ }
268
+ cbsb, cleb {
269
+ direction: ltr;
270
+ }
271
+ div.cltrans {
272
+ margin-left: 10px;
273
+ margin-right: 10px;
274
+ display: block;
275
+ border: 1px solid #00008B;
276
+ border-radius: 5px;
277
+ padding: 2px 5px;
278
+ margin-top: 3px;
279
+ margin-bottom: 3px;
280
+ }
281
+ div.wrap {
282
+ display: inline-block;
283
+ }
284
+ cl {
285
+ display: table;
286
+ }
287
+ div.c {
288
+ vertical-align: top;
289
+ text-align: left;
290
+ border: 1px solid #9B59B6;
291
+ border-radius: 5px;
292
+ padding: 2px 5px;
293
+ margin-top: 3px;
294
+ margin-bottom: 3px;
295
+ }
296
+ div.p {
297
+ display: inline-block;
298
+ vertical-align: top;
299
+ text-align: left;
300
+ border: 1px solid gray;
301
+ border-radius: 5px;
302
+ padding: 2px 5px;
303
+ margin-top: 3px;
304
+ margin-bottom: 3px;
305
+ }
306
+ div.w, div.int {
307
+ border: 1px solid #F5B041;
308
+ border-radius: 5px;
309
+ padding: 2px 5px;
310
+ margin-top: 3px;
311
+ margin-bottom: 3px;
312
+ }
313
+
314
+ /* css for clause segmentation */
315
+
316
+ div.bhsa {
317
+ direction: rtl;
318
+ border-right: 5px solid #F5B041;
319
+ margin-left: 5%;
320
+ margin-right: 5%;
321
+ padding: 5px 10px 5px 10px;
322
+ }
323
+ div.e {
324
+ border-left: 5px solid #F5B041;
325
+ margin-left: 5%;
326
+ margin-right: 5%;
327
+ padding: 5px 10px 5px 10px;
328
+ }
329
+ </style>
330
+ """
@@ -0,0 +1,15 @@
1
+ from nicegui import ui
2
+
3
+ def luV(event):
4
+ b, c, v = event.args
5
+ ui.notify(f"b: {b}, c: {c}, v: {v}")
6
+
7
+ # Create a context menu at the click position
8
+ with ui.context_menu() as menu:
9
+ ui.menu_item('Bible Commentaries', on_click=lambda: ui.navigate.to('/tool/commentary'))
10
+ ui.menu_item('Cross-references', on_click=lambda: ui.navigate.to('/tool/xref'))
11
+ ui.menu_item('Treasury of Scripture Knowledge', on_click=lambda: ui.navigate.to('/tool/tske'))
12
+ ui.menu_item('Discourse Analysis', on_click=lambda: ui.navigate.to('/tool/discourse'))
13
+ ui.menu_item('Morphological Data', on_click=lambda: ui.navigate.to('/tool/morphology'))
14
+ ui.menu_item('Translation Spectrum', on_click=lambda: ui.navigate.to('/tool/translations'))
15
+ menu.open()
@@ -0,0 +1,44 @@
1
+ from nicegui import ui
2
+
3
+ def luW(event):
4
+ # whatever we sent from the browser is available as event.args
5
+ payload = event.args
6
+ print(type(payload))
7
+ print('Server received payload:', payload)
8
+ ui.notify(f"Server got: {payload}")
9
+ def lex(event):
10
+ # whatever we sent from the browser is available as event.args
11
+ payload = event.args
12
+ print(type(payload))
13
+ print('Server received payload:', payload)
14
+ ui.notify(f"Server got: {payload}")
15
+ def bdbid(event):
16
+ # whatever we sent from the browser is available as event.args
17
+ payload = event.args
18
+ print(type(payload))
19
+ print('Server received payload:', payload)
20
+ ui.notify(f"Server got: {payload}")
21
+ def etcbcmorph(event):
22
+ # whatever we sent from the browser is available as event.args
23
+ payload = event.args
24
+ print(type(payload))
25
+ print('Server received payload:', payload)
26
+ ui.notify(f"Server got: {payload}")
27
+ def rmac(event):
28
+ # whatever we sent from the browser is available as event.args
29
+ payload = event.args
30
+ print(type(payload))
31
+ print('Server received payload:', payload)
32
+ ui.notify(f"Server got: {payload}")
33
+ def searchWord(event):
34
+ # whatever we sent from the browser is available as event.args
35
+ payload = event.args
36
+ print(type(payload))
37
+ print('Server received payload:', payload)
38
+ ui.notify(f"Server got: {payload}")
39
+ def searchLexicalEntry(event):
40
+ # whatever we sent from the browser is available as event.args
41
+ payload = event.args
42
+ print(type(payload))
43
+ print('Server received payload:', payload)
44
+ ui.notify(f"Server got: {payload}")
@@ -0,0 +1,24 @@
1
+ BIBLE_JS = """
2
+ <script>
3
+ // --- Core JavaScript Logic ---
4
+ function scrollToVerse(verseId) {
5
+ const element = document.getElementById(verseId);
6
+ if (element) {
7
+ // Use scrollIntoView to move the element into the viewport
8
+ element.scrollIntoView({
9
+ // 'smooth' makes the scrolling animated, 'auto' is instant
10
+ behavior: 'smooth',
11
+ // 'start' brings the element to the top of the scrollable area
12
+ block: 'start'
13
+ });
14
+ // Optional: Highlight the verse temporarily
15
+ element.classList.add('bg-yellow-200', 'ring-2', 'ring-yellow-500', 'shadow-lg');
16
+ setTimeout(() => {
17
+ element.classList.remove('bg-yellow-200', 'ring-2', 'ring-yellow-500', 'shadow-lg');
18
+ }, 2000); // Remove highlight after 2 seconds
19
+ } else {
20
+ console.error(`Element with ID '${verseId}' not found.`);
21
+ }
22
+ }
23
+ </script>
24
+ """
@@ -0,0 +1,44 @@
1
+ ORIGINAL_JS = """
2
+ <script>
3
+ // MOCK W3.JS (Polyfill to avoid external dependency)
4
+ var w3 = {
5
+ addStyle: function(selector, prop, value) {
6
+ document.querySelectorAll(selector).forEach(function(el) {
7
+ el.style.setProperty(prop, value);
8
+ });
9
+ }
10
+ };
11
+
12
+ // Variable used in original script for host interoperability
13
+
14
+ function hl0(id, cl, sn) {
15
+ if (cl != '') {
16
+ w3.addStyle('.c'+cl,'background-color','');
17
+ }
18
+ if (sn != '') {
19
+ w3.addStyle('.G'+sn,'background-color','');
20
+ }
21
+ if (id != '') {
22
+ var focalElement = document.getElementById('w'+id);
23
+ if (focalElement != null) {
24
+ focalElement.style.background='';
25
+ }
26
+ }
27
+ }
28
+
29
+ function hl1(id, cl, sn) {
30
+ if (cl != '') {
31
+ w3.addStyle('.c'+cl,'background-color','PAPAYAWHIP');
32
+ }
33
+ if (sn != '') {
34
+ w3.addStyle('.G'+sn,'background-color','#E7EDFF');
35
+ }
36
+ if (id != '') {
37
+ var focalElement = document.getElementById('w'+id);
38
+ if (focalElement != null) {
39
+ focalElement.style.background='#C9CFFF';
40
+ }
41
+ }
42
+ }
43
+ </script>
44
+ """