From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- support/tlg2latex/README | 73 ++++++++++++++++ support/tlg2latex/README.pdf | Bin 0 -> 26745 bytes support/tlg2latex/default.py | 49 +++++++++++ support/tlg2latex/test/1.txt | 13 +++ support/tlg2latex/test/2.txt | 14 ++++ support/tlg2latex/test/3.txt | 18 ++++ support/tlg2latex/test/4.txt | 1 + support/tlg2latex/test/normal_1.txt | 15 ++++ support/tlg2latex/test/normal_2.txt | 14 ++++ support/tlg2latex/test/normal_3.txt | 20 +++++ support/tlg2latex/test/normal_4.txt | 1 + support/tlg2latex/tlg2latex.py | 163 ++++++++++++++++++++++++++++++++++++ 12 files changed, 381 insertions(+) create mode 100644 support/tlg2latex/README create mode 100644 support/tlg2latex/README.pdf create mode 100644 support/tlg2latex/default.py create mode 100644 support/tlg2latex/test/1.txt create mode 100644 support/tlg2latex/test/2.txt create mode 100644 support/tlg2latex/test/3.txt create mode 100644 support/tlg2latex/test/4.txt create mode 100644 support/tlg2latex/test/normal_1.txt create mode 100644 support/tlg2latex/test/normal_2.txt create mode 100644 support/tlg2latex/test/normal_3.txt create mode 100644 support/tlg2latex/test/normal_4.txt create mode 100644 support/tlg2latex/tlg2latex.py (limited to 'support/tlg2latex') 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 ``` + +Documentation : http://geekographie.maieul.net/117 + +## English +To convert data from *Thesaurus Linguae Graecae* to LaTeX + +Basic use : ```python3 tlg2latex.py ``` + +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 Binary files /dev/null and b/support/tlg2latex/README.pdf 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 -- cgit v1.2.3