#!/usr/bin/env python
from docutils.core import publish_cmdline
import docutils.nodes as nodes

from burst_s5 import video_directive
from burst_s5 import inklayers_directive

def add_node(node,**kwds):
    """monkeypatch a node translator to docutils

    This is based on the sphinx.application.Sphinx.add_node method.
    """
    nodes._add_node_class_names([node.__name__])
    for key, val in kwds.iteritems():
        try:
            visit, depart = val
        except ValueError:
            raise ExtensionError('Value for key %r must be a '
                                 '(visit, depart) function tuple' % key)
        if key == 'html':
            from docutils.writers.s5_html import S5HTMLTranslator as translator
        else:
            # ignore invalid keys for compatibility
            raise ValueError('invalid key "%s"'%key)
        setattr(translator, 'visit_'+node.__name__, visit)
        if depart:
            setattr(translator, 'depart_'+node.__name__, depart)

add_node( video_directive.video,
          html=(video_directive.visit_video_html,
                video_directive.depart_video_html),
          )
add_node( inklayers_directive.inklayers,
          html=(inklayers_directive.visit_inklayers_html,
                inklayers_directive.depart_inklayers_html),
          )
publish_cmdline(writer_name='s5')
