-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Abstraction des différentes fonctionnalités
Les fonctionnalités abstraites sont : * la syntaxe, actuellement seule la syntaxe Markdown est implémentée * l’organisation des fichiers, actuellement deux organisations sont implémentées : un fichier unique ou un article par fichier * le stockage, actuellement seul le stockage sur fichier est implémenté Dans le futur, un stockage en Git-pack pourra être fait via l’abstraction de stockage (cf #51).
- Loading branch information
Showing
10 changed files
with
587 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
# -*- coding: utf-8 -*- | ||
# | ||
# Archéo Lex – Pure Histoire de la Loi française | ||
# | ||
# This program is free software. It comes without any warranty, to | ||
# the extent permitted by applicable law. You can redistribute it | ||
# and/or modify it under the terms of the Do What The Fuck You Want | ||
# To Public License, Version 2, as published by Sam Hocevar. See | ||
# the LICENSE file for more details. | ||
|
||
# Imports | ||
from __future__ import unicode_literals | ||
from __future__ import absolute_import | ||
from __future__ import division | ||
from __future__ import print_function | ||
from . import Organisations | ||
from . import Syntaxes | ||
|
||
|
||
class FichierUnique( Organisations ): | ||
|
||
""" | ||
Tout le texte est écrit dans le même fichier. | ||
Ce fichier doit être inscrit dans la propriété 'fichier' de la classe. | ||
""" | ||
|
||
fichier = '' | ||
extension = '' | ||
texte = '' | ||
|
||
def obtenir_nom_fichier( self, id, parents, num, titre ): | ||
|
||
""" | ||
Obtenir le nom du fichier où écrire la ressource donnée en paramètres. | ||
:param id: | ||
(string) ID de la ressource. | ||
:param parents: | ||
(liste de strings) Niveaux parents de la ressource. | ||
:param num: | ||
(string) Numéro de la ressource par rapport aux autres de même niveau. | ||
:param titre: | ||
(string) Titre de la ressource. | ||
:returns: | ||
(string|None) Emplacement du fichier ou None pour ne pas écrire la ressource. | ||
""" | ||
|
||
if not self.fichier: | ||
raise Exception() | ||
|
||
return self.fichier + self.extension | ||
|
||
def ecrire_ressource( self, id, parents, num, titre, texte ): | ||
|
||
""" | ||
:param id: | ||
(string) ID de la ressource. | ||
:param parents: | ||
(liste de strings) Niveaux parents de la ressource. | ||
:param num: | ||
(string) Numéro de la ressource par rapport aux autres de même niveau. | ||
:param titre: | ||
(string) Titre de la ressource. | ||
:param texte: | ||
(string|None) Texte de la ressource. | ||
:returns: | ||
(string) Texte de la ressource. | ||
""" | ||
|
||
if not self.syntaxe: | ||
raise Exception() | ||
|
||
if id[4:8] == 'ARTI': | ||
if num: | ||
titre = 'Article ' + num | ||
else: | ||
titre = 'Article (non-numéroté)' | ||
titre_formate = self.syntaxe.obtenir_titre( parents, titre ) | ||
texte = self.texte + titre_formate + texte + '\n\n' | ||
elif id[4:8] == 'SCTA': | ||
titre_formate = self.syntaxe.obtenir_titre( parents, titre ) | ||
texte = self.texte + titre_formate + '\n\n' | ||
else: | ||
raise Exception() | ||
|
||
return texte | ||
|
||
def ecrire_texte( self ): | ||
|
||
""" | ||
Écrire le fichier la version du texte. | ||
""" | ||
|
||
pass | ||
|
||
|
||
# vim: set ts=4 sw=4 sts=4 et: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
# -*- coding: utf-8 -*- | ||
# | ||
# Archéo Lex – Pure Histoire de la Loi française | ||
# | ||
# This program is free software. It comes without any warranty, to | ||
# the extent permitted by applicable law. You can redistribute it | ||
# and/or modify it under the terms of the Do What The Fuck You Want | ||
# To Public License, Version 2, as published by Sam Hocevar. See | ||
# the LICENSE file for more details. | ||
|
||
# Imports | ||
from __future__ import unicode_literals | ||
from __future__ import absolute_import | ||
from __future__ import division | ||
from __future__ import print_function | ||
import re | ||
from . import Syntaxes | ||
|
||
|
||
class Markdown( Syntaxes ): | ||
|
||
def transformer_depuis_html( self, html ): | ||
|
||
""" | ||
Transformer un texte en Markdown à partir du HTML. | ||
:param html: | ||
(string) HTML à transformer. | ||
:returns: | ||
(string|None) Texte équivalent en Markdown. | ||
""" | ||
|
||
# Transformation des <br/> en <p> | ||
texte = html | ||
if texte == None: | ||
texte = '' | ||
texte = re.sub(r'<br ?\/>', '\n', texte) | ||
texte = re.sub(r'<p>(.*?)<\/p>', r'\1\n\n', texte, flags=re.DOTALL) | ||
texte = re.sub(r'\n\n+', '\n\n', texte) | ||
|
||
# Retrait des espaces blancs de fin de ligne | ||
texte = '\n'.join([l.strip() for l in texte.split('\n')]) | ||
texte = texte.strip() | ||
|
||
# - Markdownisation des listes numérotées | ||
#lignes = texte.split('\n') | ||
#ligne_liste = [ False ] * len(lignes) | ||
#for i in range(len(lignes)): | ||
# if re.match(r'(?:\d+[°\.\)-]|[\*-]) ', lignes[i]): | ||
# ligne_liste[i] = True | ||
# lignes[i] = re.sub(r'^(\d+)([°\.\)-]) +', r'\1. ', lignes[i]) | ||
# lignes[i] = re.sub(r'^([\*-]) +', r'- ', lignes[i]) | ||
|
||
# - Création d’alinea séparés, sauf pour les listes | ||
#texte = lignes[0] | ||
#for i in range(1, len(lignes)): | ||
# if ligne_liste[i]: | ||
# texte = texte + '\n' + lignes[i] | ||
# else: | ||
# texte = texte + '\n\n' + lignes[i] | ||
|
||
return texte | ||
|
||
def obtenir_titre( self, parents, texte ): | ||
|
||
""" | ||
Obtenir le titre dans la syntaxe représentée. | ||
:param parents: | ||
(liste de strings) Niveaux parents de la ressource. :param texte: | ||
(string) Texte du titre. | ||
:returns: | ||
(string|None) Texte du titre dans la syntaxe représentée. | ||
""" | ||
|
||
marque_niveau = '' | ||
for i in range( len(parents) ): | ||
marque_niveau = marque_niveau + '#' | ||
|
||
return marque_niveau + ' ' + texte + '\n\n' | ||
|
||
|
||
# vim: set ts=4 sw=4 sts=4 et: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
# -*- coding: utf-8 -*- | ||
# | ||
# Archéo Lex – Pure Histoire de la Loi française | ||
# | ||
# This program is free software. It comes without any warranty, to | ||
# the extent permitted by applicable law. You can redistribute it | ||
# and/or modify it under the terms of the Do What The Fuck You Want | ||
# To Public License, Version 2, as published by Sam Hocevar. See | ||
# the LICENSE file for more details. | ||
|
||
# Imports | ||
from __future__ import unicode_literals | ||
from __future__ import absolute_import | ||
from __future__ import division | ||
from __future__ import print_function | ||
|
||
|
||
class Organisations: | ||
|
||
syntaxe = None | ||
|
||
def obtenir_nom_fichier( self, id, parents, num, titre ): | ||
|
||
""" | ||
Obtenir le nom du fichier où écrire la ressource donnée en paramètres. | ||
:param id: | ||
(string) ID de la ressource. | ||
:param parents: | ||
(liste de strings) Niveaux parents de la ressource. | ||
:param num: | ||
(string) Numéro d’ordre de la ressource par rapport aux autres de même niveau. | ||
:param titre: | ||
(string) Titre de la ressource. | ||
:returns: | ||
(string|None) Emplacement du fichier ou None pour ne pas écrire la ressource. | ||
""" | ||
|
||
raise NotImplementedError | ||
|
||
def ecrire_ressource( self, id, parents, titre, texte ): | ||
|
||
""" | ||
Écrire la ressource en cours. | ||
:param id: | ||
(string) ID de la ressource. | ||
:param parents: | ||
(liste de strings) Niveaux parents de la ressource. | ||
:param num: | ||
(string) Numéro de la ressource par rapport aux autres de même niveau. | ||
:param titre: | ||
(string) Titre de la ressource. | ||
:param texte: | ||
(string|None) Texte de la ressource. | ||
:returns: | ||
(string) Texte de la ressource. | ||
""" | ||
|
||
raise NotImplementedError | ||
|
||
def ecrire_texte( self ): | ||
|
||
""" | ||
Écrire le fichier la version du texte. | ||
""" | ||
|
||
pass | ||
|
||
|
||
# vim: set ts=4 sw=4 sts=4 et: |
Oops, something went wrong.