Skip to content

Commit d585990

Browse files
committed
apply references
1 parent e80c320 commit d585990

11 files changed

+831
-26
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ result.html: $(pages)
2020
volume.html: build
2121
cabal run > $@
2222
@echo "FIXME: removing html entities with actual chars"
23-
sed -i '1,4d' $@
23+
sed -i '1,5d' $@
2424
sed -i 's/&/\&/g' $@
2525
sed -i 's/&lt;/</g' $@
2626
sed -i 's/&gt;/>/g' $@

db.sqlite

0 Bytes
Binary file not shown.

src/Textus.hs

+9-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Polysemy (Members, Sem, runM)
66
import Textus.DB (Commentary, DB, Word, interpretDB,
77
readAllBookCommentaries,
88
readAllBookLatinVerses,
9-
readAllBookWords, toVolume, Latin)
9+
readAllBookWords, toVolume, Latin, readAllBookReferences, Reference)
1010
import Textus.Log (Log, interpretLog, logDebug)
1111
import Textus.Mustache (interpretMustache, renderTemplate)
1212

@@ -28,13 +28,19 @@ getJohnComments conn = do
2828
logDebug $ "found " <> (pack . show . Prelude.length $ johnComments) <> " comments."
2929
return johnComments
3030

31+
getJohnReferences :: Members '[DB, Log] r => Connection -> Sem r [Textus.DB.Reference]
32+
getJohnReferences conn = do
33+
johnComments <- readAllBookReferences conn 500
34+
logDebug $ "found " <> (pack . show . Prelude.length $ johnComments) <> " references."
35+
return johnComments
36+
3137
app :: IO ()
3238
app = do
3339
conn <- open "db.sqlite"
3440
runM . interpretDB . interpretLog . interpretMustache $ do
3541
ls <- getJohnLatinVerses conn
3642
ws <- getJohnWords conn
3743
cs <- getJohnComments conn
38-
renderTemplate $ toVolume ws cs ls
39-
-- logDebug . pack . show $ toVolume ws cs
44+
rs <- getJohnReferences conn
45+
renderTemplate $ toVolume ws rs cs ls
4046
close conn

src/Textus/DB.hs

+48-20
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22

33
module Textus.DB where
44

5-
import Data.Aeson
6-
import Data.List
7-
import Data.Text
8-
import Database.SQLite.Simple
5+
import Data.Aeson (ToJSON)
6+
import Data.List (groupBy, sort)
7+
import Data.Text (Text)
8+
import Database.SQLite.Simple (Connection, FromRow (..),
9+
NamedParam ((:=)), field, queryNamed)
910
import GHC.Generics (Generic)
10-
import Polysemy
11+
import Polysemy (Embed, Member, Sem, embed, interpret,
12+
makeSem)
1113
import Prelude hiding (Word)
14+
import Data.Text (intercalate)
1215

1316
type BookNumber = Int
1417
type ChapterNumber = Int
@@ -48,13 +51,23 @@ data Word =
4851
, wRed :: Bool
4952
} deriving (Eq, Show, Generic)
5053

54+
data Reference =
55+
Reference { rFrom :: Text
56+
, rTo :: Text
57+
, rVote :: Int
58+
, rBookNumber :: BookNumber
59+
, rChapterNumber :: ChapterNumber
60+
, rVerseNumber :: VerseNumber
61+
} deriving (Eq, Show, Generic)
62+
5163
-- structure data types
5264
data Verse =
5365
Verse { verseNumber :: VerseNumber
5466
, words :: [Textus.DB.Word]
5567
, comments :: [Textus.DB.Commentary]
5668
, latin :: Text
5769
, eusebeios :: Int
70+
, references :: Text
5871
} deriving (Eq, Show, Generic)
5972

6073
data Chapter =
@@ -76,6 +89,7 @@ instance ToJSON Textus.DB.Chapter
7689
instance ToJSON Textus.DB.Book
7790
instance ToJSON Textus.DB.Volume
7891
instance ToJSON Textus.DB.Commentary
92+
instance ToJSON Textus.DB.Reference
7993

8094
-- FromRow instances
8195
instance FromRow Commentary where
@@ -87,6 +101,9 @@ instance FromRow Latin where
87101
instance FromRow Word where
88102
fromRow = Word <$> field <*> field <*> field <*> field <*> field <*> field <*> field <*> field <*> field <*> field
89103

104+
instance FromRow Reference where
105+
fromRow = Reference <$> field <*> field <*> field <*> field <*> field <*> field
106+
90107
-- Ord instances
91108
instance Ord Commentary where
92109
compare (Commentary a b c _ _ _ _ _) (Commentary d e f _ _ _ _ _) = compare (a, b, c) (d, e, f)
@@ -97,8 +114,11 @@ instance Ord Latin where
97114
instance Ord Word where
98115
compare (Word ba ca va pa _ _ _ _ _ _) (Word bb cb vb pb _ _ _ _ _ _) = compare (ba, ca, va, pa) (bb, cb, vb, pb)
99116

117+
instance Ord Reference where
118+
compare (Reference _ _ p a b c) (Reference _ _ q d e f) = compare (a, b, c, p) (d, e, f, q)
119+
100120
instance Ord Verse where
101-
compare (Verse a _ _ _ _) (Verse b _ _ _ _) = compare a b
121+
compare (Verse a _ _ _ _ _) (Verse b _ _ _ _ _) = compare a b
102122

103123
instance Ord Chapter where
104124
compare (Chapter a _) (Chapter b _) = compare a b
@@ -111,50 +131,58 @@ data DB m a where
111131
ReadAllBookCommentaries :: Connection -> BookNumber -> DB m [Commentary]
112132
ReadAllBookLatinVerses :: Connection -> BookNumber -> DB m [Latin]
113133
ReadAllBookWords :: Connection -> BookNumber -> DB m [Word]
134+
ReadAllBookReferences :: Connection -> BookNumber -> DB m [Reference]
114135

115136
makeSem ''DB
116137

117138
interpretDB :: Member (Embed IO) r => Sem (DB ': r) a -> Sem r a
118139
interpretDB = interpret \case
119-
ReadAllBookCommentaries c bn -> embed $ queryNamed c "SELECT * FROM commentaries WHERE book=:bn" [ ":bn" := bn ]
120-
ReadAllBookLatinVerses c bn -> embed $ queryNamed c "SELECT * FROM latin_verses WHERE book=:bn" [ ":bn" := bn ]
121-
ReadAllBookWords c bn -> embed $ queryNamed c "SELECT * FROM words WHERE book=:bn" [ ":bn" := bn ]
140+
ReadAllBookCommentaries c bn -> embed $ queryNamed c "SELECT * FROM `commentaries` WHERE `book`=:bn" [ ":bn" := bn ]
141+
ReadAllBookLatinVerses c bn -> embed $ queryNamed c "SELECT * FROM `latin_verses` WHERE `book`=:bn" [ ":bn" := bn ]
142+
ReadAllBookWords c bn -> embed $ queryNamed c "SELECT * FROM `words` WHERE `book`=:bn" [ ":bn" := bn ]
143+
ReadAllBookReferences c bn -> embed $ queryNamed c "SELECT * FROM `references` WHERE `book`=:bn" [ ":bn" := bn ]
122144

123145
-- structure constructor
124-
toVolume :: [Word] -> [Commentary] -> [Latin] -> Volume
125-
toVolume ws cs ls = Volume $ toBooks ws cs ls
146+
toVolume :: [Word] -> [Reference] -> [Commentary] -> [Latin] -> Volume
147+
toVolume ws rs cs ls = Volume $ toBooks ws rs cs ls
126148

127-
toBooks :: [Word] -> [Commentary] -> [Latin] -> [Book]
128-
toBooks ws cs ls = sort $ fmap mkBook wordsGroupedByBook
129-
where mkBook a = Book (bn a) (sort $ toChapters a (cWithSameBookNumber a) (lWithSameBookNumber a))
149+
toBooks :: [Word] -> [Reference] -> [Commentary] -> [Latin] -> [Book]
150+
toBooks ws rs cs ls = sort $ fmap mkBook wordsGroupedByBook
151+
where mkBook a = Book (bn a) (sort $ toChapters a (rWithSameBookNumber a) (cWithSameBookNumber a) (lWithSameBookNumber a))
130152
cWithSameBookNumber a = Prelude.filter (cEqual $ bn a) cs
131153
lWithSameBookNumber a = Prelude.filter (lEqual $ bn a) ls
154+
rWithSameBookNumber a = Prelude.filter (rEqual $ bn a) rs
132155
bn a = wBookNumber . Prelude.head $ a
133156
wordsGroupedByBook = Data.List.groupBy equalBookNumbers ws
134157
equalBookNumbers a b = wBookNumber a == wBookNumber b
135158
cEqual a (Commentary b _ _ _ _ _ _ _) = a == b
136159
lEqual a (Latin b _ _ _ _) = a == b
160+
rEqual a (Reference _ _ _ b _ _) = a == b
137161

138-
toChapters :: [Word] -> [Commentary] -> [Latin] -> [Chapter]
139-
toChapters ws cs ls = fmap mkChapter wordsGroupedByChapter
140-
where mkChapter a = Chapter (cn a) (sort $ toVerses a (cWithSameBookNumber a) (lWithSameBookNumber a))
162+
toChapters :: [Word] -> [Reference] -> [Commentary] -> [Latin] -> [Chapter]
163+
toChapters ws rs cs ls = fmap mkChapter wordsGroupedByChapter
164+
where mkChapter a = Chapter (cn a) (sort $ toVerses a (rWithSameBookNumber a) (cWithSameBookNumber a) (lWithSameBookNumber a))
141165
cWithSameBookNumber a = Prelude.filter (cEqual $ cn a) cs
142166
lWithSameBookNumber a = Prelude.filter (lEqual $ cn a) ls
167+
rWithSameBookNumber a = Prelude.filter (rEqual $ cn a) rs
143168
cn a = wChapterNumber . Prelude.head $ a
144169
wordsGroupedByChapter = Data.List.groupBy equalChapterNumbers ws
145170
equalChapterNumbers a b = wChapterNumber a == wChapterNumber b
146171
cEqual a (Commentary _ c _ _ _ _ _ _) = a == c
147172
lEqual a (Latin _ c _ _ _) = a == c
173+
rEqual a (Reference _ _ _ _ c _) = a == c
148174

149-
toVerses :: [Word] -> [Commentary] -> [Latin] -> [Verse]
150-
toVerses ws cs ls = fmap mkVerse wordsGroupedByVerse
151-
where mkVerse a = Verse (vn a) (sort a) (cWithSameBookNumber a) (lVerseText a) (lVerseEusebeios a)
175+
toVerses :: [Word] -> [Reference] -> [Commentary] -> [Latin] -> [Verse]
176+
toVerses ws rs cs ls = fmap mkVerse wordsGroupedByVerse
177+
where mkVerse a = Verse (vn a) (sort a) (cWithSameBookNumber a) (lVerseText a) (lVerseEusebeios a) (intercalate (", " :: Text) $ rTo <$> rWithSameBookNumber a)
152178
cWithSameBookNumber a = Prelude.filter (cEqual $ vn a) cs
153179
lWithSameBookNumber a = Prelude.filter (lEqual $ vn a) ls
180+
rWithSameBookNumber a = sort $ Prelude.filter (rEqual $ vn a) rs
154181
lVerseText a = lText . Prelude.head . lWithSameBookNumber $ a
155182
lVerseEusebeios a = lEusebeios . Prelude.minimum . lWithSameBookNumber $ a
156183
vn a = wVerseNumber . Prelude.head $ a
157184
wordsGroupedByVerse = Data.List.groupBy equalVerseNumbers ws
158185
equalVerseNumbers a b = wVerseNumber a == wVerseNumber b
159186
cEqual a (Commentary _ _ v _ _ _ _ _) = a == v
160187
lEqual a (Latin _ _ v _ _) = a == v
188+
rEqual a (Reference _ _ _ _ _ v) = a == v

static/01-titlepage.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<dt>Kody gramatyczne</dt>
1313
<dd>http://bibliaapologety.com/</dd>
1414
<dt>Kompilacja</dt>
15-
<dd>https://github.com/placek/na<br>Paweł Placzyński; wydanie v1.5.0; Łódź 2021</dd>
15+
<dd>https://github.com/placek/na<br>Paweł Placzyński; wydanie v1.6.0; Łódź 2021</dd>
1616
</dl>
1717
<strong><em>…ad maiorem Dei gloriam et Beatissimæ Virginis Mariæ honorem…</em></strong>
1818
<object class="logo" data="./img/monogram.svg"></object>

static/02-intro.html

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<article class="article">
2+
<h1>Wstęp</h1>
3+
4+
<section>
5+
<p>"Co jest napisane w Biblii?" - to pytanie może zadać chrześcijaninowi laik. Stronnik Chrystusa powinien na to pytanie umieć odpowiedzieć. Przyparty do muru apologeta zmuszony jest podjąć walkę z ignorancją i związanymi z nią nieporozumieniami. Argumenty ateistów-racjonalistów, nawałnica biblijnych teorii spiskowych czy przepychanki z domorosłymi biblistami mogą zgasić ducha walki. W dobie Internetu i wygodnej technologii mobilnej nie wymaga się raczej od nikogo znajomości obszernych tekstów napisanych w trudnym, archaicznym języku. Stąd książki, ebooki, bazy danych, aplikacje, materiały pomocnicze, itp.</p>
6+
7+
<p>Niniejsze wydanie aspiruje na bycie takim właśnie materiałem pomocniczym. Będąc syntezą i kompilacją dwóch znamienitych pozycji dostępnych polskiemu czytelnikowi: "Nowego Testamentu greckiego i polskiego" Romana Bogacza i Romana Mazura SDB (Pallotinum) oraz "Grecko-polskiego Nowego Testamentu" Michała Wojciechowskiego i Remigiusza Popowskiego SDB (Vocatio), staje się solidnym narzędziem do analizy tekstu biblijnego. Przedstawia ono "literę" Pisma Świętego, z uwzględnieniem niuansów językowych, jak też i historii samego tekstu pisanego.</p>
8+
9+
<p>Aparat krytyczny pochodzący z dzieła Nestle-Aland pozwala wskazać rękopisy stojące za tekstem oraz wynikające z wielu różnych czynników różnice w wariantach tekstowych. Aparat lingwistyczny w postaci kodów Stronga oraz kodow gramatycznych otwiera czytelnikowi, nieznajacemu języka oryginału, możliwość czytania tekstu ze zrozumieniem subtelności tegoż języka. Dodatkowo, zestawienie z najbardziej rozpowszechnionym na świecie łacińskim tłumaczniem (Wulgatą) pozwala czytelnikowi odnieść się do tradycji przekazu biblijnego.</p>
10+
11+
<p>Nie jest to oczywiście dzieło wyczerpujące temat. Pomimo szerokiej prezentacji "litery" Pisma Świętego nie przekazuje ono jego "ducha" - tła historycznego, konstekstu kulturowego, aspektów ówczesnej religii, sytuacji politycznej regionu, relacji pomiędzy stanami/grupami społecznymi, wiedzy ówczesnych, ich filozofii/światopoglądu, itp. Nie porusza także zagadnień filozoficznych i teologicznych wynikających z chrześcijańskiej (późniejszej) analizy tekstow świętych. Nie podejmuje się także interpretacji "litery" Pisma… Czytelnik, ktoremu zależy na zrozumieniu treści zawartych w tekscie Pisma, powinien zaopatrzyć się w inne materiały poruszające wyżej wspomniane zagadnienia.</p>
12+
13+
<p>Mam nadzieję, że narzędzie to będzie dobrze służyło do walki z ignorancją i zachęci do zgłębiania Pisma Świętego.</p>
14+
15+
<p>Paweł Placzyński</p>
16+
</section>
17+
</article>

0 commit comments

Comments
 (0)