import re
import mistune


class SpoilerInlineGrammar(mistune.InlineGrammar):
    spoiler = re.compile(r'^\|\|(.+?)\s+([\s\S]+?)\s*\|\|')


class SpoilerInlineLexer(mistune.InlineLexer):
    grammar_class = SpoilerInlineGrammar

    def __init__(self, *args, **kwargs):
        self.default_rules.insert(0, 'spoiler')
        super(SpoilerInlineLexer, self).__init__(*args, **kwargs)
        
    def output_spoiler(self, m):
        return self.renderer.spoiler(m.group(1), m.group(2))


class SpoilerRenderer(mistune.Renderer):
    def spoiler(self, summary, text):
        return '''<details>
            <summary style="color: brown">
                <span class="spoiler-summary">%s</span>
            </summary>
            <div class="spoiler-text">%s</div>
        </details>''' % (summary, text)