#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pywikibot
from exporter import DocExporter
class MWExporter(DocExporter):
    """Exporte une documentation vers un site Mediawiki."""
    def open(self, name, fullname):
        """Initialise les propriétés utiles."""
        self._site = pywikibot.Site()
        self._page = pywikibot.Page(self._site, self._build_page_name(fullname))
        self._content = '__NOTOC__'
        self._content += '\n'
    def close(self):
        """Termine l'édition de la documentation."""
        if self._content != self._page.text:
            self._page.text = self._content
            self._page.save('API update')
    def _build_page_name(self, orig):
        """Définit le nom final d'une page faisant référence à un module."""
        return orig + ' Python Module'
    def show_list_sub_modules(self, gparent, parent, others, builder):
        """Affiche des renvois vers les sous-parties présentes."""
        if len(others) > 0 or gparent != None:
            self._content += '
\n==Sub modules==\n
\n'
            if gparent != None:
                self._content += '* [[%s|..]]\n' % self._build_page_name(gparent)
            for o in others:
                fullname = builder(parent, o._name)
                self._content += '* [[%s|%s]]\n' % (self._build_page_name(fullname), fullname)
    def show_list_sub_classes(self, parent, classes, builder):
        """Affiche des renvois vers les sous-parties présentes."""
        if len(classes) > 0:
            self._content += '\n==Classes==\n
\n'
            for cls in classes:
                self._content += '* [[%s#%s|%s]]\n' % (self._build_page_name(parent), cls, builder(parent, cls))
    def describe_module(self, desc):
        """Affiche la description du module courant."""
        self._content += '\n==Description==\n
\n'
        self._content += '%s
\n' % desc
    def start_main_section(self, title):
        """Affiche un en-tête pour la zone des classes."""
        self._content += '\n=%s=\n
\n' % title
    def show_class_info(self, name, desc):
        """Affiche les informations générales d'une classe."""
        self._content += '\n==%s==\n
\n' % (name, name)
        self._content += '%s
\n' % desc
    def show_info_section(self, title):
        """Affiche une section d'informations particulières."""
        self._content += '\n===%s===\n
\n' % title
    def begin_hierarchy_level(self):
        """Démarre une arborescence hiérarchique."""
        self._content += '\n'
    def terminate_hierarchy_level(self):
        """Arrête une arborescence hiérarchique."""
        self._content += '
\n\n'
    def print_hierarchy_level(self, fullname, name, page, level):
        """Affiche un élément hiérarchique."""
        if level > 0:
            for i in range(level - 1):
                self._content += ' ' * 5
            self._content += ' ╰── '
        if page != None:
            self._content += '[[%s#%s|' % (self._build_page_name(page), name)
        self._content += fullname
        if page != None:
            self._content += ']]'
        self._content += '\n'
    def show_constant_info(self, name):
        """Affiche un élément de type 'constant'."""
        self._content += '\n'
        self._content += '%s\n' % name
    def show_data_info(self, name, value):
        """Affiche un élément de type 'donnée'."""
        self._content += '\n'
        self._content += '%s = ' % name
        self._content += '%s\n' % value
    def show_attribute_info(self, name, desc):
        """Affiche un élément de type 'attribut'."""
        self._content += '\n'
        self._content += '%s\n' % name
        self._content += '\n'
        self._content += '%s\n' % desc
    def show_callable_info(self, ret, name, args, desc):
        """Affiche un élément de type 'routine'."""
        if args == None:
            args = '()'
        self._content += '\n'
        self._content += '%s(%s)\n' % (name, args)
        self._content += '\n'
        self._content += '%s
\n' % desc