summaryrefslogtreecommitdiff
path: root/support/tlg2latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/tlg2latex
Initial commit
Diffstat (limited to 'support/tlg2latex')
-rw-r--r--support/tlg2latex/README73
-rw-r--r--support/tlg2latex/README.pdfbin0 -> 26745 bytes
-rw-r--r--support/tlg2latex/default.py49
-rw-r--r--support/tlg2latex/test/1.txt13
-rw-r--r--support/tlg2latex/test/2.txt14
-rw-r--r--support/tlg2latex/test/3.txt18
-rw-r--r--support/tlg2latex/test/4.txt1
-rw-r--r--support/tlg2latex/test/normal_1.txt15
-rw-r--r--support/tlg2latex/test/normal_2.txt14
-rw-r--r--support/tlg2latex/test/normal_3.txt20
-rw-r--r--support/tlg2latex/test/normal_4.txt1
-rw-r--r--support/tlg2latex/tlg2latex.py163
12 files changed, 381 insertions, 0 deletions
diff --git a/support/tlg2latex/README b/support/tlg2latex/README
new file mode 100644
index 0000000000..95fd81345b
--- /dev/null
+++ b/support/tlg2latex/README
@@ -0,0 +1,73 @@
+#tlg2latex
+
+GPL 3 https://www.gnu.org/licenses/gpl-3.0.html
+
+Maïeul ROUQUETTE, Annette von STOCKHAUSEN
+
+https://github.com/maieul/tlg2latex
+
+## Français
+Convertir facilement des données issues du *Thesaurus Linguae Graecae* vers LaTeX.
+
+Utilisation basique : ```python3 tlg2latex.py <fichier_a_convertir>```
+
+Documentation : http://geekographie.maieul.net/117
+
+## English
+To convert data from *Thesaurus Linguae Graecae* to LaTeX
+
+Basic use : ```python3 tlg2latex.py <file_to_convert>```
+
+Documentation : http://geekographie.maieul.net/117
+
+## Changelog
+
+### 2.6.0 21-10-2014
+
+Allow ἴνα ellipsis as ἴν’
+
+### 2.5.2 03-02-2014
+
+Correct line ending characters.
+
+### 2.5.1 03-01-2014
+
+Correct bug when a hyphen is before a line number and this line number is kept in the output.
+
+### 2.5 21-08-2013
+
+Managing stanza.
+
+### 2.4 13-06-2013
+
+Possibility to run a last regular expression at the end of all transformation's steps.
+
+### 2.3 12-06-2013
+
+Possibility to define the way by which line numbers are transformed.
+
+### 2.2 20-05-2013
+
+Possibility to manage insert's symbol, empty lines and paragraph's skip.
+
+### 2.1 15-05-2013
+
+Manage ndash.
+
+
+### 2.0 29-04-2013
+
+Possibility to configure the script.
+
+### 1.1.1 12-04-2013
+
+The theta character is now added for the ellipsis. Manage hyphens before line numbers.
+
+### 1.1 20-12-2013
+
+More type of hyphens and dashes, manage (partially) chapter's numbers.
+
+### 1.0 11-12-2013
+
+First public release.
+
diff --git a/support/tlg2latex/README.pdf b/support/tlg2latex/README.pdf
new file mode 100644
index 0000000000..f2acb2593e
--- /dev/null
+++ b/support/tlg2latex/README.pdf
Binary files differ
diff --git a/support/tlg2latex/default.py b/support/tlg2latex/default.py
new file mode 100644
index 0000000000..7a9906c291
--- /dev/null
+++ b/support/tlg2latex/default.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# Maïeul ROUQUETTE ; Annette von STOCKHAUSEN
+# GPL 3
+# https://www.gnu.org/licenses/gpl-3.0.html
+# default file configuration
+
+#reading
+hyphen = ("‑","-") # the ≠ type of hyphen
+line_number_r = "\([0-9]*\)" # the regexp to test the line number
+ellipsis = "([γδ(δι)θλμπρτφ(ἵν)])’" # the regexp to prevent transforming ellipsis to endquot
+begin_quote_r = "[‘“«]" # the regexp to find begining of quotation
+end_quote_r = "[’”»]" # the regexp to find end of quotation
+paragraph_r = "\((\w+?)\.\) " # the regexp to find a paragraph number
+chapter_r = "(\d+?\.)" # the regexp to find a chapter number
+ndash_r = "—" # the ndash in reading
+begin_insert_r = "<" # the symbol at begining of insert.
+end_insert_r = ">" # the symbol at end of insert.
+par_break_r = "^( )" # the begining of paragraph
+empty_line_r = ("","\r","\n") # the empty lines
+before_stanza_r = " \n" # before stanza
+after_stanta_r = " \n" # after stanza
+#writing
+par_break_w = "\n\n" # the begining of paragraph
+begin_quote_w = "\enquote{" # the begining of quotation
+end_quote_w = "}" # the end of quotation
+paragraph_w = r"\\marginnote{\1}" # the paragraph number
+chapter_w = r"\n\\textbf{\1}" # the chapter number
+unicode_normalize = False # to normalize or not to normalize the Unicode characters ? See the documentation of unicodedata.normalize() on http://docs.python.org/2/library/unicodedata.html. The value :
+ #False : not normalize ?
+ #"NFC"
+ #"NFKC"
+ #"NFD"
+ #"NFKD"
+ellipsis_back = "’" # the ellipsis symbol
+ndash_w = "--" # the ndash in writing
+begin_insert_w = r"\\textins{" # the begining of insert.
+end_insert_w = "}" # the end of insert.
+empty_line_w = "\n"
+line_number_w = "" # the line number at end
+last_regexp = False # rexgep which are applied at last (("find1","replace1"),("find2","replace2"))
+before_stanza_w = "\stanza" #before stanza
+after_stanza_w = "\&"
+between_stanza_w = "&"
+#import the config file.
+
+try :
+ from config import *
+except:
+ pass \ No newline at end of file
diff --git a/support/tlg2latex/test/1.txt b/support/tlg2latex/test/1.txt
new file mode 100644
index 0000000000..52c92ff94b
--- /dev/null
+++ b/support/tlg2latex/test/1.txt
@@ -0,0 +1,13 @@
+ Ἔκαμεν ὁ λόγος, τοῦτον τὸν θεσπέσιον καὶ τριπόθητον
+Βαρνάβαν τὸν ἀπόστολον ἐπᾶραι τοῖς ἐγκωμίοις ποθῶν,
+καὶ οὔπω ἥψατο τοῦ προοιμίου· τοῖς γὰρ ἐπαίνοις ἀπρό-
+σιτος τυγχάνει ὁ θαυμάσιος. Διὸ ἀφέντες ὡς ἀνέφικτον (135)
+τὸν περὶ τῶν ἐγκωμίων λόγον, ὀλίγα τῶν εἰς ἡμᾶς
+ἰόντων περὶ τῆς τούτου βιώσεως καὶ τελειώσεως ἔκ τε
+τοῦ Στρωματέως καὶ ἐξ ἑτέρων ἀρχαίων συγγραμμάτων
+παραθήσομαι τῇ ὑμετέρᾳ ὁσιότητι, καὶ οὕτω τὸ πέρας
+ἐπιθήσομεν τῷ διηγήματι, παραχωρήσαντες τῇ θεοπνεύστῳ (140)
+Γραφῇ τοῦ ἀοιδίμου τὴν κεφαλὴν μεγαλοπρεπῶς στε-
+φανῶσαι· φησὶ γάρ· “Ἦν δὲ Βαρνάβας ἀνὴρ ἀγαθὸς καὶ
+πλήρης Πνεύματος ἁγίου καὶ πίστεως.” Οὗ τί ἂν γένοιτο
+ἴσον ἢ παραπλήσιον πώποτε; \ No newline at end of file
diff --git a/support/tlg2latex/test/2.txt b/support/tlg2latex/test/2.txt
new file mode 100644
index 0000000000..ac060467c3
--- /dev/null
+++ b/support/tlg2latex/test/2.txt
@@ -0,0 +1,14 @@
+νῦν δὲ ἤδη ἀπολλυμένους ἐπιφανεὶς περισέσωκεν. Τὸ γὰρ
+πονηρὸν καὶ ἑρπηστικὸν θηρίον γοητεῦον καταδουλοῦται καὶ
+αἰκίζεται εἰσέτι νῦν τοὺς ἀνθρώπους, ἐμοὶ δοκεῖν, βαρβα‑ (5)
+ρικῶς τιμωρούμενον, οἳ νεκροῖς τοὺς αἰχμαλώτους συνδεῖν
+(5.) λέγονται σώμασιν, ἔστ’ ἂν αὐτοῖς καὶ συσσαπῶσιν. Ὁ γοῦν
+πονηρὸς οὑτοσὶ τύραννος καὶ δράκων, οὓς ἂν οἷός τε εἴη ἐκ
+γενετῆς σφετερίσασθαι, λίθοις καὶ ξύλοις καὶ ἀγάλμασιν
+καὶ τοιούτοις τισὶν εἰδώλοις προσσφίγξας τῷ δεισιδαιμονίας
+ἀθλίῳ δεσμῷ, τοῦτο δὴ τὸ λεγόμενον, ζῶντας ἐπιφέρων (5)
+(6.) συνέθαψεν αὐτούς, ἔστ’ ἂν καὶ συμφθαρῶσιν. Οὗ δὴ χάριν
+(εἷς γὰρ ὁ ἀπατεὼν ἄνωθεν μὲν τὴν Εὔαν, νῦν δὲ ἤδη καὶ
+τοὺς ἄλλους ἀνθρώπους εἰς θάνατον ὑποφέρων) εἷς καὶ αὐτὸς
+ἐπίκουρος καὶ βοηθὸς ἡμῖν ὁ κύριος, προμηνύων ἀρχῆθεν
+προφητικῶς, νῦν δὲ ἤδη καὶ ἐναργῶς εἰς σωτηρίαν παρα‑ (5)
diff --git a/support/tlg2latex/test/3.txt b/support/tlg2latex/test/3.txt
new file mode 100644
index 0000000000..65797300bf
--- /dev/null
+++ b/support/tlg2latex/test/3.txt
@@ -0,0 +1,18 @@
+ Καὶ ταῦτα μέν σου τὰ διὰ Χριστὸν ἄθλα, πανθαύμαστε,
+καὶ οἱ ἀγῶνες καὶ τὰ παλαίσματα. Σὺ δὲ καὶ ἔτι
+πρεσβείας ὑπὲρ τοῦ κόσμου ποιούμενος, ἀξιόθεε, αἴτησαι
+καὶ βασιλέως ἡμῶν ὑπὲρ τοῦ καλοῦ καὶ τὰ πάντα (230)
+χρηστοῦ, δοθῆναι τούτῳ
+
+μήκιστον ζωὴν καὶ παθῶν ὑπερτέραν,
+ἰλύος πάσης ὅλως ἀπηλλαγμένην,
+χειρὶ σκεπομένην τε τοῦ θεοῦ λόγου,
+ἀπαλείφουσαν ἐθνῶν ἄπειρα πλήθη, (235)
+ἡμεροῦσαν δὴ χώρας αὐτῶν καὶ πόλεις,
+λαμπροῖς τροπαίοις καὶ νίκαις εὐπρεπέσι,
+πάντων ἀγαθῶν οὐρανίων τὴν δόσιν
+
+καὶ βασιλείας θεοῦ τὴν κληρουχίαν· ὅτι αὐτῷ Χρι-
+στῷ τῷ θεῷ ἡμῶν πρέπει ἡ δόξα, νῦν καὶ εἰς τοὺς (240)
+ἀτελευτήτους αἰῶνας ἀμήν.
+
diff --git a/support/tlg2latex/test/4.txt b/support/tlg2latex/test/4.txt
new file mode 100644
index 0000000000..964d12909c
--- /dev/null
+++ b/support/tlg2latex/test/4.txt
@@ -0,0 +1 @@
+διεξελθεῖν ἀναγκαῖον ἐν ἐπιτόμῳ συνεῖδον, ἵν’ ἔχοιεν οἱ
diff --git a/support/tlg2latex/test/normal_1.txt b/support/tlg2latex/test/normal_1.txt
new file mode 100644
index 0000000000..50310a66bc
--- /dev/null
+++ b/support/tlg2latex/test/normal_1.txt
@@ -0,0 +1,15 @@
+
+
+Ἔκαμεν ὁ λόγος, τοῦτον τὸν θεσπέσιον καὶ τριπόθητον
+Βαρνάβαν τὸν ἀπόστολον ἐπᾶραι τοῖς ἐγκωμίοις ποθῶν,
+καὶ οὔπω ἥψατο τοῦ προοιμίου· τοῖς γὰρ ἐπαίνοις ἀπρό%
+σιτος τυγχάνει ὁ θαυμάσιος. Διὸ ἀφέντες ὡς ἀνέφικτον
+τὸν περὶ τῶν ἐγκωμίων λόγον, ὀλίγα τῶν εἰς ἡμᾶς
+ἰόντων περὶ τῆς τούτου βιώσεως καὶ τελειώσεως ἔκ τε
+τοῦ Στρωματέως καὶ ἐξ ἑτέρων ἀρχαίων συγγραμμάτων
+παραθήσομαι τῇ ὑμετέρᾳ ὁσιότητι, καὶ οὕτω τὸ πέρας
+ἐπιθήσομεν τῷ διηγήματι, παραχωρήσαντες τῇ θεοπνεύστῳ
+Γραφῇ τοῦ ἀοιδίμου τὴν κεφαλὴν μεγαλοπρεπῶς στε%
+φανῶσαι· φησὶ γάρ· \enquote{Ἦν δὲ Βαρνάβας ἀνὴρ ἀγαθὸς καὶ
+πλήρης Πνεύματος ἁγίου καὶ πίστεως.} Οὗ τί ἂν γένοιτο
+ἴσον ἢ παραπλήσιον πώποτε;
diff --git a/support/tlg2latex/test/normal_2.txt b/support/tlg2latex/test/normal_2.txt
new file mode 100644
index 0000000000..577ea1e1ec
--- /dev/null
+++ b/support/tlg2latex/test/normal_2.txt
@@ -0,0 +1,14 @@
+νῦν δὲ ἤδη ἀπολλυμένους ἐπιφανεὶς περισέσωκεν. Τὸ γὰρ
+πονηρὸν καὶ ἑρπηστικὸν θηρίον γοητεῦον καταδουλοῦται καὶ
+αἰκίζεται εἰσέτι νῦν τοὺς ἀνθρώπους, ἐμοὶ δοκεῖν, βαρβα%
+ρικῶς τιμωρούμενον, οἳ νεκροῖς τοὺς αἰχμαλώτους συνδεῖν
+\marginnote{5}λέγονται σώμασιν, ἔστ’ ἂν αὐτοῖς καὶ συσσαπῶσιν. Ὁ γοῦν
+πονηρὸς οὑτοσὶ τύραννος καὶ δράκων, οὓς ἂν οἷός τε εἴη ἐκ
+γενετῆς σφετερίσασθαι, λίθοις καὶ ξύλοις καὶ ἀγάλμασιν
+καὶ τοιούτοις τισὶν εἰδώλοις προσσφίγξας τῷ δεισιδαιμονίας
+ἀθλίῳ δεσμῷ, τοῦτο δὴ τὸ λεγόμενον, ζῶντας ἐπιφέρων
+\marginnote{6}συνέθαψεν αὐτούς, ἔστ’ ἂν καὶ συμφθαρῶσιν. Οὗ δὴ χάριν
+(εἷς γὰρ ὁ ἀπατεὼν ἄνωθεν μὲν τὴν Εὔαν, νῦν δὲ ἤδη καὶ
+τοὺς ἄλλους ἀνθρώπους εἰς θάνατον ὑποφέρων) εἷς καὶ αὐτὸς
+ἐπίκουρος καὶ βοηθὸς ἡμῖν ὁ κύριος, προμηνύων ἀρχῆθεν
+προφητικῶς, νῦν δὲ ἤδη καὶ ἐναργῶς εἰς σωτηρίαν παρα%
diff --git a/support/tlg2latex/test/normal_3.txt b/support/tlg2latex/test/normal_3.txt
new file mode 100644
index 0000000000..d4d99851fa
--- /dev/null
+++ b/support/tlg2latex/test/normal_3.txt
@@ -0,0 +1,20 @@
+
+
+Καὶ ταῦτα μέν σου τὰ διὰ Χριστὸν ἄθλα, πανθαύμαστε,
+καὶ οἱ ἀγῶνες καὶ τὰ παλαίσματα. Σὺ δὲ καὶ ἔτι
+πρεσβείας ὑπὲρ τοῦ κόσμου ποιούμενος, ἀξιόθεε, αἴτησαι
+καὶ βασιλέως ἡμῶν ὑπὲρ τοῦ καλοῦ καὶ τὰ πάντα
+χρηστοῦ, δοθῆναι τούτῳ
+\stanza
+μήκιστον ζωὴν καὶ παθῶν ὑπερτέραν,&
+ἰλύος πάσης ὅλως ἀπηλλαγμένην,&
+χειρὶ σκεπομένην τε τοῦ θεοῦ λόγου,&
+ἀπαλείφουσαν ἐθνῶν ἄπειρα πλήθη,&
+ἡμεροῦσαν δὴ χώρας αὐτῶν καὶ πόλεις,&
+λαμπροῖς τροπαίοις καὶ νίκαις εὐπρεπέσι,&
+πάντων ἀγαθῶν οὐρανίων τὴν δόσιν
+\&
+καὶ βασιλείας θεοῦ τὴν κληρουχίαν· ὅτι αὐτῷ Χρι%
+στῷ τῷ θεῷ ἡμῶν πρέπει ἡ δόξα, νῦν καὶ εἰς τοὺς
+ἀτελευτήτους αἰῶνας ἀμήν.
+
diff --git a/support/tlg2latex/test/normal_4.txt b/support/tlg2latex/test/normal_4.txt
new file mode 100644
index 0000000000..964d12909c
--- /dev/null
+++ b/support/tlg2latex/test/normal_4.txt
@@ -0,0 +1 @@
+διεξελθεῖν ἀναγκαῖον ἐν ἐπιτόμῳ συνεῖδον, ἵν’ ἔχοιεν οἱ
diff --git a/support/tlg2latex/tlg2latex.py b/support/tlg2latex/tlg2latex.py
new file mode 100644
index 0000000000..86cb0793b5
--- /dev/null
+++ b/support/tlg2latex/tlg2latex.py
@@ -0,0 +1,163 @@
+# -*- coding: utf-8 -*-
+# Maïeul ROUQUETTE ; Annette von STOCKHAUSEN
+# GPL 3
+# https://www.gnu.org/licenses/gpl-3.0.html
+# Ce script permet de transformer des textes issu du TLG en texte utilisable en LaTeX :
+# - suppression des numeros de lines
+# - suppression des césures
+# - remplacement des guillemets par des \enquote{}
+# Version 2.6.0
+import re
+import os
+import default as config
+import unicodedata
+global stanza
+stanza = False # set to True when verses starts
+def normaliser_fichier(fichier):
+ '''Normalise un fichier'''
+ import codecs
+ finale = ''
+ debut_phrase = True
+ file = codecs.open(fichier,encoding='utf-8')
+ for line in file:
+ if line not in config.empty_line_r:
+ finale = finale + normalize_line(line)+'\n'
+ else:
+ finale = finale + config.empty_line_w
+
+ # correct end stanza
+ finale = finale.replace(config.between_stanza_w+"\n"+config.after_stanza_w+"\n","\n"+config.after_stanza_w+"\n")
+
+
+ file.close()
+ if os.path.dirname(fichier)=="":
+ destination = "normal_" + os.path.basename(fichier)
+ else:
+ destination = os.path.dirname(fichier) + os.sep + "normal_" + os.path.basename(fichier)
+ file = codecs.open(destination,encoding='utf-8',mode='w')
+ file.write(finale)
+ file.close()
+
+def make_regexp_linenumber_hyphen():
+ '''Make a regexp containing regexp for the line number preceding by the regexp for the hyphen.
+ Return also the corresponding regexp replacement'''
+ line_number_r,line_number_w = config.line_number_r,config.line_number_w
+
+ # Prepare the regexp
+ line_number_r = "([" + "".join(config.hyphen) + "]?)" + "[\s]*" + line_number_r
+
+ # Prepare the regexp replacement
+ line_number_w = line_number_w.replace("1","2") + "\\1"
+
+ return line_number_r,line_number_w
+
+
+def normalize_line(line):
+ '''Normalize one line'''
+
+
+ line_number_r,line_number_w = make_regexp_linenumber_hyphen()
+ line = re.sub(line_number_r,line_number_w,line) # change of line number
+
+
+ # are we at the begining of a new paragraph
+ if re.match(config.par_break_r,line):
+ paragraph = True
+ else:
+ paragraph = False
+
+ # for stanza
+ global stanza
+ stanza_start = False
+ stanza_end = False
+
+ if re.match(config.before_stanza_r,line):
+ if stanza == False:
+ stanza = True
+ stanza_start = True
+ else:
+ stanza = False
+ stanza_end = True
+
+
+ line = line.strip() # suppression des espaces de début et fin
+ # hyphenation
+ try:
+ if line[-1] in config.hyphen:
+ line = line[:-1] + "%"
+ except:
+ pass
+
+
+ # les guillemets
+ line = re.sub(config.ellipsis,r"\1'",line) # replace ’ in Ellipsis with ', otherwise not discernable from single endquote
+ line = re.sub(config.begin_quote_r,config.begin_quote_w,line)
+ line = re.sub(config.end_quote_r,config.end_quote_w,line)
+ line = re.sub("\'",config.ellipsis_back,line) # replace ’ back
+
+ #tiret
+ line = re.sub(config.ndash_r,config.ndash_w,line)
+
+ #insert
+ line = re.sub(config.begin_insert_r,config.begin_insert_w,line)
+ line = re.sub(config.end_insert_r,config.end_insert_w,line)
+
+ # chapters and paragraphs
+ line = re.sub(config.paragraph_r,config.paragraph_w,line) # paragraph number
+ line = re.sub(config.chapter_r,config.chapter_w,line) #chapter number
+
+ # paragraph begining:
+ if paragraph:
+ line = config.par_break_w + line
+
+ # last series of regexp
+ if config.last_regexp:
+ for regexp in config.last_regexp:
+ line = re.sub(regexp[0],regexp[1],line)
+
+ # stanza
+ if stanza_end:
+ line = config.after_stanza_w
+ elif stanza_start:
+ line = config.before_stanza_w
+ elif stanza :
+ line = line + config.between_stanza_w
+
+ # Unicode normalization
+ if config.unicode_normalize:
+ line = unicodedata.normalize(config.unicode_normalize,line)
+ return line
+
+def test():
+ """Be sur any modification doesn't break compatibilty"""
+ test = os.listdir("test") #All the file of the test directory.
+ import hashlib
+ for file in test:
+ if file[0] in ["0","1","2","3","4","5","6","7","8","9"]: #If it's a file to be tested.
+ md5 = hashlib.md5(open("test" + os.sep + "normal_" + file,"rb").read()).hexdigest()
+ normaliser_fichier("test" + os.sep + file)
+
+ if md5 !=hashlib.md5(open("test" + os.sep + "normal_" + file,"rb").read()).hexdigest():
+ print ("Error on file" + file)
+
+ else:
+ print ("File "+file+ " OK")
+
+def __main__():
+ import sys
+ import getopt
+ option = getopt.getopt(sys.argv[1:],'')[1]
+ if option == ['test']:
+ test()
+ sys.exit()
+ else:
+ for fichier in option:
+ try:
+ normaliser_fichier(fichier)
+ print (fichier + " normalisé")
+ except Exception as e:
+ print ("Can't normalize "+ fichier + " "+ str(e))
+ sys.exit()
+
+
+__main__() \ No newline at end of file