From b8bc67690137690bdb5bf7e0d73faec7f60c872f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?xavier=20dupr=C3=A9?= Date: Tue, 19 Apr 2022 11:25:00 +0200 Subject: [PATCH 1/4] Extends quote extension (sphinx) --- .../ut_sphinxext/test_quote_extension.py | 62 +++++++++++++++++++ .../sphinxext/sphinx_quote_extension.py | 10 ++- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/_unittests/ut_sphinxext/test_quote_extension.py b/_unittests/ut_sphinxext/test_quote_extension.py index 1089fb1fb..29e5a7502 100644 --- a/_unittests/ut_sphinxext/test_quote_extension.py +++ b/_unittests/ut_sphinxext/test_quote_extension.py @@ -83,6 +83,68 @@ def test_quote(self): if ":author: auteur" not in rst: raise Exception(rst) + def test_quote_manga(self): + from docutils import nodes as skip_ + + content = """ + .. quote:: + :author: auteur + :manga: manga titre + :lid: label1 + :pages: 234 + :year: 2018 + + this code should appear___ + + next + """.replace(" ", "") + if sys.version_info[0] >= 3: + content = content.replace('u"', '"') + + tives = [("quote", QuoteNode, quote_node, + visit_quote_node, depart_quote_node)] + + html = rst2html(content, # fLOG=fLOG, + writer="html", keep_warnings=True, + directives=tives, extlinks={'issue': ('http://%s', '_issue_')}) + + temp = get_temp_folder(__file__, "temp_quote_manga", clean=False) + with open(os.path.join(temp, "test_quote_manga.html"), "w", encoding="utf8") as f: + f.write(html) + + t1 = "this code should appear" + if t1 not in html: + raise Exception(html) + if "auteur" not in html: + raise Exception(html) + if "manga titre" not in html: + raise Exception(html) + if "234" not in html: + raise Exception(html) + + tives = [("quote", QuoteNode, quote_node, + visit_quote_node_rst, depart_quote_node_rst)] + + rst = rst2html(content, # fLOG=fLOG, + writer="rst", keep_warnings=True, + directives=tives, extlinks={'issue': ('http://%s', '_issue_')}) + + with open(os.path.join(temp, "test_quote_manga.rst"), "w", encoding="utf8") as f: + f.write(rst) + + t1 = "this code should appear" + if t1 not in rst: + raise Exception(rst) + if "auteur" not in rst: + raise Exception(rst) + if "manga titre" not in rst: + raise Exception(rst) + if "234" not in rst: + raise Exception(rst) + if ".. quote::" not in rst: + raise Exception(rst) + if ":author: auteur" not in rst: + raise Exception(rst) if __name__ == "__main__": unittest.main() diff --git a/src/pyquickhelper/sphinxext/sphinx_quote_extension.py b/src/pyquickhelper/sphinxext/sphinx_quote_extension.py index eeef6ff63..ab9b76aef 100644 --- a/src/pyquickhelper/sphinxext/sphinx_quote_extension.py +++ b/src/pyquickhelper/sphinxext/sphinx_quote_extension.py @@ -26,7 +26,7 @@ class QuoteNode(BaseAdmonition): It takes the following options: * *author* - * *book* + * *book* or *manga* * *year* * *pages* * *tag* @@ -58,6 +58,7 @@ class QuoteNode(BaseAdmonition): option_spec = { 'author': directives.unchanged, 'book': directives.unchanged, + 'manga': directives.unchanged, 'year': directives.unchanged, 'pages': directives.unchanged, 'tag': directives.unchanged, @@ -100,6 +101,7 @@ def __(text): # book author = __(self.options.get('author', "").strip()) book = __(self.options.get('book', "").strip()) + manga = __(self.options.get('manga', "").strip()) pages = __(self.options.get('pages', "").strip()) year = __(self.options.get('year', "").strip()) source = __(self.options.get('source', "").strip()) @@ -123,6 +125,9 @@ def __(text): if book: tnl.append("*{0}*".format(book)) indexes.append(book) + if manga: + tnl.append("*{0}*".format(manga)) + indexes.append(manga) if pages: tnl.append(", {0}".format(pages)) if date: @@ -146,7 +151,7 @@ def __(text): from sphinx.util import logging logger = logging.getLogger("blogpost") logger.warning( - "[blogpost] unable to parse '{0}' - '{1}' - {2}".format(author, book, e)) + "[blogpost] unable to parse '{0}' - '{1}' - {2}".format(author, book or manga, e)) raise e node['tag'] = tag @@ -156,6 +161,7 @@ def __(text): node['label'] = lid node['source'] = source node['book'] = book + node['manga'] = manga node['index'] = index node['content'] = '\n'.join(self.content) node['classes'] += ["quote"] From f41d629839950a0398b105b2e205cdd950faa41d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?xavier=20dupr=C3=A9?= Date: Tue, 19 Apr 2022 12:37:54 +0200 Subject: [PATCH 2/4] film, show --- .../ut_sphinxext/test_quote_extension.py | 126 ++++++++++++++++++ .../sphinxext/sphinx_quote_extension.py | 14 +- 2 files changed, 139 insertions(+), 1 deletion(-) diff --git a/_unittests/ut_sphinxext/test_quote_extension.py b/_unittests/ut_sphinxext/test_quote_extension.py index 29e5a7502..f4efe7cd2 100644 --- a/_unittests/ut_sphinxext/test_quote_extension.py +++ b/_unittests/ut_sphinxext/test_quote_extension.py @@ -146,5 +146,131 @@ def test_quote_manga(self): if ":author: auteur" not in rst: raise Exception(rst) + def test_quote_film(self): + from docutils import nodes as skip_ + + content = """ + .. quote:: + :author: auteur + :film: film titre + :lid: label1 + :pages: 234 + :year: 2018 + + this code should appear___ + + next + """.replace(" ", "") + if sys.version_info[0] >= 3: + content = content.replace('u"', '"') + + tives = [("quote", QuoteNode, quote_node, + visit_quote_node, depart_quote_node)] + + html = rst2html(content, # fLOG=fLOG, + writer="html", keep_warnings=True, + directives=tives, extlinks={'issue': ('http://%s', '_issue_')}) + + temp = get_temp_folder(__file__, "temp_quote_film", clean=False) + with open(os.path.join(temp, "test_quote_film.html"), "w", encoding="utf8") as f: + f.write(html) + + t1 = "this code should appear" + if t1 not in html: + raise Exception(html) + if "auteur" not in html: + raise Exception(html) + if "film titre" not in html: + raise Exception(html) + if "234" not in html: + raise Exception(html) + + tives = [("quote", QuoteNode, quote_node, + visit_quote_node_rst, depart_quote_node_rst)] + + rst = rst2html(content, # fLOG=fLOG, + writer="rst", keep_warnings=True, + directives=tives, extlinks={'issue': ('http://%s', '_issue_')}) + + with open(os.path.join(temp, "test_quote_film.rst"), "w", encoding="utf8") as f: + f.write(rst) + + t1 = "this code should appear" + if t1 not in rst: + raise Exception(rst) + if "auteur" not in rst: + raise Exception(rst) + if "film titre" not in rst: + raise Exception(rst) + if "234" not in rst: + raise Exception(rst) + if ".. quote::" not in rst: + raise Exception(rst) + if ":author: auteur" not in rst: + raise Exception(rst) + + def test_quote_show(self): + from docutils import nodes as skip_ + + content = """ + .. quote:: + :author: auteur + :show: show titre + :lid: label1 + :pages: 234 + :year: 2018 + + this code should appear___ + + next + """.replace(" ", "") + if sys.version_info[0] >= 3: + content = content.replace('u"', '"') + + tives = [("quote", QuoteNode, quote_node, + visit_quote_node, depart_quote_node)] + + html = rst2html(content, # fLOG=fLOG, + writer="html", keep_warnings=True, + directives=tives, extlinks={'issue': ('http://%s', '_issue_')}) + + temp = get_temp_folder(__file__, "temp_quote_show", clean=False) + with open(os.path.join(temp, "test_quote_show.html"), "w", encoding="utf8") as f: + f.write(html) + + t1 = "this code should appear" + if t1 not in html: + raise Exception(html) + if "auteur" not in html: + raise Exception(html) + if "show titre" not in html: + raise Exception(html) + if "234" not in html: + raise Exception(html) + + tives = [("quote", QuoteNode, quote_node, + visit_quote_node_rst, depart_quote_node_rst)] + + rst = rst2html(content, # fLOG=fLOG, + writer="rst", keep_warnings=True, + directives=tives, extlinks={'issue': ('http://%s', '_issue_')}) + + with open(os.path.join(temp, "test_quote_show.rst"), "w", encoding="utf8") as f: + f.write(rst) + + t1 = "this code should appear" + if t1 not in rst: + raise Exception(rst) + if "auteur" not in rst: + raise Exception(rst) + if "show titre" not in rst: + raise Exception(rst) + if "234" not in rst: + raise Exception(rst) + if ".. quote::" not in rst: + raise Exception(rst) + if ":author: auteur" not in rst: + raise Exception(rst) + if __name__ == "__main__": unittest.main() diff --git a/src/pyquickhelper/sphinxext/sphinx_quote_extension.py b/src/pyquickhelper/sphinxext/sphinx_quote_extension.py index ab9b76aef..2fedd5520 100644 --- a/src/pyquickhelper/sphinxext/sphinx_quote_extension.py +++ b/src/pyquickhelper/sphinxext/sphinx_quote_extension.py @@ -26,7 +26,7 @@ class QuoteNode(BaseAdmonition): It takes the following options: * *author* - * *book* or *manga* + * *book* or *manga* or *film* or *show* * *year* * *pages* * *tag* @@ -59,6 +59,8 @@ class QuoteNode(BaseAdmonition): 'author': directives.unchanged, 'book': directives.unchanged, 'manga': directives.unchanged, + 'show': directives.unchanged, + 'film': directives.unchanged, 'year': directives.unchanged, 'pages': directives.unchanged, 'tag': directives.unchanged, @@ -102,6 +104,8 @@ def __(text): author = __(self.options.get('author', "").strip()) book = __(self.options.get('book', "").strip()) manga = __(self.options.get('manga', "").strip()) + film = __(self.options.get('film', "").strip()) + show = __(self.options.get('show', "").strip()) pages = __(self.options.get('pages', "").strip()) year = __(self.options.get('year', "").strip()) source = __(self.options.get('source', "").strip()) @@ -128,6 +132,12 @@ def __(text): if manga: tnl.append("*{0}*".format(manga)) indexes.append(manga) + if show: + tnl.append("*{0}*".format(show)) + indexes.append(show) + if film: + tnl.append("*{0}*".format(film)) + indexes.append(film) if pages: tnl.append(", {0}".format(pages)) if date: @@ -162,6 +172,8 @@ def __(text): node['source'] = source node['book'] = book node['manga'] = manga + node['film'] = film + node['show'] = show node['index'] = index node['content'] = '\n'.join(self.content) node['classes'] += ["quote"] From d15e171110cf6741264bdeb07235f2feb857cccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?xavier=20dupr=C3=A9?= Date: Wed, 20 Apr 2022 10:49:06 +0200 Subject: [PATCH 3/4] Adds parameter title1 to quote directive --- .../ut_sphinxext/test_quote_extension.py | 1 + .../sphinxext/sphinx_quote_extension.py | 50 +++++++++++++------ 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/_unittests/ut_sphinxext/test_quote_extension.py b/_unittests/ut_sphinxext/test_quote_extension.py index f4efe7cd2..310aae60b 100644 --- a/_unittests/ut_sphinxext/test_quote_extension.py +++ b/_unittests/ut_sphinxext/test_quote_extension.py @@ -219,6 +219,7 @@ def test_quote_show(self): :lid: label1 :pages: 234 :year: 2018 + :title1: true this code should appear___ diff --git a/src/pyquickhelper/sphinxext/sphinx_quote_extension.py b/src/pyquickhelper/sphinxext/sphinx_quote_extension.py index 2fedd5520..44dc97dd3 100644 --- a/src/pyquickhelper/sphinxext/sphinx_quote_extension.py +++ b/src/pyquickhelper/sphinxext/sphinx_quote_extension.py @@ -34,6 +34,7 @@ class QuoteNode(BaseAdmonition): * *lid* or *label* * *index*, additional index words beside the title and the author * *date*, if the text was written or declared at specific date + * *title1*, by default, the author comes first, if True, the title is Example:: @@ -70,6 +71,7 @@ class QuoteNode(BaseAdmonition): 'class': directives.class_option, 'index': directives.unchanged, 'date': directives.unchanged, + 'title1': directives.unchanged, } def run(self): @@ -111,6 +113,7 @@ def __(text): source = __(self.options.get('source', "").strip()) index = __(self.options.get('index', "").strip()) date = __(self.options.get('date', "").strip()) + title1 = __(self.options.get('title1', "").strip()) in ('1', 1, 'True', True, 'true') indexes = [] if index: @@ -123,21 +126,38 @@ def __(text): else: tnl = [] # pragma: no cover - if author: - tnl.append("**{0}**, ".format(author)) - indexes.append(author) - if book: - tnl.append("*{0}*".format(book)) - indexes.append(book) - if manga: - tnl.append("*{0}*".format(manga)) - indexes.append(manga) - if show: - tnl.append("*{0}*".format(show)) - indexes.append(show) - if film: - tnl.append("*{0}*".format(film)) - indexes.append(film) + if title1: + if book: + tnl.append("**{0}**".format(book)) + indexes.append(book) + if manga: + tnl.append("**{0}**".format(manga)) + indexes.append(manga) + if show: + tnl.append("**{0}**".format(show)) + indexes.append(show) + if film: + tnl.append("**{0}**".format(film)) + indexes.append(film) + if author: + tnl.append("*{0}*, ".format(author)) + indexes.append(author) + else: + if author: + tnl.append("**{0}**, ".format(author)) + indexes.append(author) + if book: + tnl.append("*{0}*".format(book)) + indexes.append(book) + if manga: + tnl.append("*{0}*".format(manga)) + indexes.append(manga) + if show: + tnl.append("*{0}*".format(show)) + indexes.append(show) + if film: + tnl.append("*{0}*".format(film)) + indexes.append(film) if pages: tnl.append(", {0}".format(pages)) if date: From 8dce1394b1772484c98bb7245046b2f4b6a66d41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?xavier=20dupr=C3=A9?= Date: Wed, 20 Apr 2022 16:09:00 +0200 Subject: [PATCH 4/4] Extends quote extension --- .../ut_sphinxext/test_quote_extension.py | 129 ++++++++++++++++++ .../sphinxext/sphinx_quote_extension.py | 52 +++++-- .../texthelper/texts_language.py | 14 ++ 3 files changed, 184 insertions(+), 11 deletions(-) diff --git a/_unittests/ut_sphinxext/test_quote_extension.py b/_unittests/ut_sphinxext/test_quote_extension.py index 310aae60b..60e51eee7 100644 --- a/_unittests/ut_sphinxext/test_quote_extension.py +++ b/_unittests/ut_sphinxext/test_quote_extension.py @@ -273,5 +273,134 @@ def test_quote_show(self): if ":author: auteur" not in rst: raise Exception(rst) + def test_quote_comic(self): + from docutils import nodes as skip_ + + content = """ + .. quote:: + :author: auteur + :comic: comic titre + :lid: label1 + :pages: 234 + :year: 2018 + :title1: true + + this code should appear___ + + next + """.replace(" ", "") + if sys.version_info[0] >= 3: + content = content.replace('u"', '"') + + tives = [("quote", QuoteNode, quote_node, + visit_quote_node, depart_quote_node)] + + html = rst2html(content, # fLOG=fLOG, + writer="html", keep_warnings=True, + directives=tives, extlinks={'issue': ('http://%s', '_issue_')}) + + temp = get_temp_folder(__file__, "temp_quote_comic", clean=False) + with open(os.path.join(temp, "test_quote_comic.html"), "w", encoding="utf8") as f: + f.write(html) + + t1 = "this code should appear" + if t1 not in html: + raise Exception(html) + if "auteur" not in html: + raise Exception(html) + if "comic titre" not in html: + raise Exception(html) + if "234" not in html: + raise Exception(html) + + tives = [("quote", QuoteNode, quote_node, + visit_quote_node_rst, depart_quote_node_rst)] + + rst = rst2html(content, # fLOG=fLOG, + writer="rst", keep_warnings=True, + directives=tives, extlinks={'issue': ('http://%s', '_issue_')}) + + with open(os.path.join(temp, "test_quote_comic.rst"), "w", encoding="utf8") as f: + f.write(rst) + + t1 = "this code should appear" + if t1 not in rst: + raise Exception(rst) + if "auteur" not in rst: + raise Exception(rst) + if "comic titre" not in rst: + raise Exception(rst) + if "234" not in rst: + raise Exception(rst) + if ".. quote::" not in rst: + raise Exception(rst) + if ":author: auteur" not in rst: + raise Exception(rst) + + def test_quote_disc(self): + from docutils import nodes as skip_ + + content = """ + .. quote:: + :author: auteur + :disc: disc titre + :lid: label1 + :pages: 234 + :year: 2018 + :title1: true + + this code should appear___ + + next + """.replace(" ", "") + if sys.version_info[0] >= 3: + content = content.replace('u"', '"') + + tives = [("quote", QuoteNode, quote_node, + visit_quote_node, depart_quote_node)] + + html = rst2html(content, # fLOG=fLOG, + writer="html", keep_warnings=True, + directives=tives, extlinks={'issue': ('http://%s', '_issue_')}) + + temp = get_temp_folder(__file__, "temp_quote_disc", clean=False) + with open(os.path.join(temp, "test_quote_disc.html"), "w", encoding="utf8") as f: + f.write(html) + + t1 = "this code should appear" + if t1 not in html: + raise Exception(html) + if "auteur" not in html: + raise Exception(html) + if "disc titre" not in html: + raise Exception(html) + if "234" not in html: + raise Exception(html) + + tives = [("quote", QuoteNode, quote_node, + visit_quote_node_rst, depart_quote_node_rst)] + + rst = rst2html(content, # fLOG=fLOG, + writer="rst", keep_warnings=True, + directives=tives, extlinks={'issue': ('http://%s', '_issue_')}) + + with open(os.path.join(temp, "test_quote_disc.rst"), "w", encoding="utf8") as f: + f.write(rst) + + t1 = "this code should appear" + if t1 not in rst: + raise Exception(rst) + if "auteur" not in rst: + raise Exception(rst) + if "disc titre" not in rst: + raise Exception(rst) + if "234" not in rst: + raise Exception(rst) + if ".. quote::" not in rst: + raise Exception(rst) + if ":author: auteur" not in rst: + raise Exception(rst) + + if __name__ == "__main__": unittest.main() diff --git a/src/pyquickhelper/sphinxext/sphinx_quote_extension.py b/src/pyquickhelper/sphinxext/sphinx_quote_extension.py index 44dc97dd3..459fc1d0a 100644 --- a/src/pyquickhelper/sphinxext/sphinx_quote_extension.py +++ b/src/pyquickhelper/sphinxext/sphinx_quote_extension.py @@ -11,6 +11,7 @@ from docutils.parsers.rst.directives.admonitions import BaseAdmonition from docutils.statemachine import StringList from sphinx.util.nodes import nested_parse_with_titles +from ..texthelper.texts_language import TITLES class quote_node(nodes.admonition): @@ -26,7 +27,7 @@ class QuoteNode(BaseAdmonition): It takes the following options: * *author* - * *book* or *manga* or *film* or *show* + * *book* or *manga* or *film* or *show* or *disc* or *comic* * *year* * *pages* * *tag* @@ -60,6 +61,8 @@ class QuoteNode(BaseAdmonition): 'author': directives.unchanged, 'book': directives.unchanged, 'manga': directives.unchanged, + 'disc': directives.unchanged, + 'comic': directives.unchanged, 'show': directives.unchanged, 'film': directives.unchanged, 'year': directives.unchanged, @@ -83,6 +86,8 @@ def run(self): docname = None if env is None else env.docname if docname is not None: docname = docname.replace("\\", "/").split("/")[-1] + language_code = self.state.document.settings.language_code if hasattr( + self.state.document.settings, "language_code") else "en" if not self.options.get('class'): self.options['class'] = ['admonition-quote'] @@ -106,6 +111,8 @@ def __(text): author = __(self.options.get('author', "").strip()) book = __(self.options.get('book', "").strip()) manga = __(self.options.get('manga', "").strip()) + comic = __(self.options.get('comic', "").strip()) + disc = __(self.options.get('disc', "").strip()) film = __(self.options.get('film', "").strip()) show = __(self.options.get('show', "").strip()) pages = __(self.options.get('pages', "").strip()) @@ -127,37 +134,58 @@ def __(text): tnl = [] # pragma: no cover if title1: + if comic: + tnl.append("**{0}**".format(comic)) + if disc: + tnl.append("**{0}**".format(disc)) if book: tnl.append("**{0}**".format(book)) - indexes.append(book) if manga: tnl.append("**{0}**".format(manga)) - indexes.append(manga) if show: tnl.append("**{0}**".format(show)) - indexes.append(show) if film: tnl.append("**{0}**".format(film)) - indexes.append(film) if author: tnl.append("*{0}*, ".format(author)) - indexes.append(author) else: if author: tnl.append("**{0}**, ".format(author)) - indexes.append(author) + if comic: + tnl.append("*{0}*".format(comic)) + if disc: + tnl.append("*{0}*".format(disc)) if book: tnl.append("*{0}*".format(book)) - indexes.append(book) if manga: tnl.append("*{0}*".format(manga)) - indexes.append(manga) if show: tnl.append("*{0}*".format(show)) - indexes.append(show) if film: tnl.append("*{0}*".format(film)) - indexes.append(film) + + if author: + indexes.append(author) + indexes.append(TITLES[language_code]['author'] + "; " + author) + if comic: + indexes.append(comic) + indexes.append(TITLES[language_code]['comic'] + "; " + comic) + if disc: + indexes.append(disc) + indexes.append(TITLES[language_code]['disc'] + "; " + disc) + if book: + indexes.append(book) + indexes.append(TITLES[language_code]['book'] + "; " + book) + if manga: + indexes.append(manga) + indexes.append(TITLES[language_code]['manga'] + "; " + manga) + if show: + indexes.append(show) + indexes.append(TITLES[language_code]['show'] + "; " + show) + if film: + indexes.append(film) + indexes.append(TITLES[language_code]['film'] + "; " + film) + if pages: tnl.append(", {0}".format(pages)) if date: @@ -192,6 +220,8 @@ def __(text): node['source'] = source node['book'] = book node['manga'] = manga + node['disc'] = disc + node['comic'] = comic node['film'] = film node['show'] = show node['index'] = index diff --git a/src/pyquickhelper/texthelper/texts_language.py b/src/pyquickhelper/texthelper/texts_language.py index ac9292c32..3a34b9100 100644 --- a/src/pyquickhelper/texthelper/texts_language.py +++ b/src/pyquickhelper/texthelper/texts_language.py @@ -7,9 +7,11 @@ TITLES = { 'en': { 'allblogs': 'All blog posts', + 'author': 'author', 'blocref_node': '', 'blog_entry': 'The original entry is located in <<%s>>, line %d and can be found ', 'blogpost': 'blogpost', + 'book': 'book', 'brefmes': '(<<%s>> : %s, line %d)', 'by category:': 'By category:', 'by month:': 'By month:', @@ -18,12 +20,15 @@ 'changes': 'Changes', 'cmdmes': '(<<%s>> : %s, line %d)', 'code': 'code', + 'comic': 'comic', 'download': 'download', + 'disc': 'disc', 'exmes': '(<<%s>> : %s, line %d)', 'exref_node': 'Examples', 'FAQ': 'FAQ', 'faqmes': '(<<%s>> : %s, line %d)', 'faqref_node': 'FAQ', + 'film': 'movie', 'glossary': 'Glossary', 'hide': 'hide', 'In': '<<<', @@ -32,6 +37,7 @@ 'main': 'blog list', 'main2': 'blog main page', 'main_title': 'blog page', + 'manga': 'manga', 'mathdef_node': '', 'mathmes': '(<<%s>> : %s, line %d)', 'more': 'post', @@ -42,6 +48,7 @@ 'Out2': 'Raw', 'outl': 'output', 'page1': 'first page', + 'show': 'show', 'toc': 'Contents', 'toc0': 'Links', 'toc1': 'Information', @@ -53,9 +60,11 @@ }, 'fr': { 'allblogs': 'Tous les articles de blog', + 'author': 'auteur', 'blocref_node': '', 'blog_entry': 'Source <<%s>>, line %d and can be found ', 'blogpost': 'article', + 'book': 'livre', 'brefmes': '(<<%s>> : %s, ligne %d)', 'by category:': 'Par catégorie :', 'by month:': 'Par mois :', @@ -64,12 +73,15 @@ 'changes': 'Changements', 'cmdmes': '(<<%s>> : %s, line %d)', 'code': 'code', + 'comic': 'bande dessinée', + 'disc': 'disque', 'download': 'télécharger', 'exmes': '(<<%s>> : %s, ligne %d)', 'exref_node': 'Exemples', 'FAQ': 'FAQ', 'faqmes': '(<<%s>> : %s, ligne %d)', 'faqref_node': 'FAQ', + 'film': 'film', 'glossary': 'Glossaire', 'hide': 'cacher', 'In': '<<<', @@ -78,6 +90,7 @@ 'main': "liste d'articles du blog", 'main2': 'page principale du blog', 'main_title': 'page de blog', + 'manga': 'dessin animé', 'mathdef_node': '', 'mathmes': '(<<%s>> : %s, ligne %d)', 'more': 'article', @@ -88,6 +101,7 @@ 'Out2': 'Sortie brute', 'outl': 'la sortie', 'page1': 'première page', + 'show': 'série', 'toc': 'Contenu', 'toc0': 'Liens', 'toc1': 'Information',