2016-08-07 7 views
0

В Docutils document tree узел title может встречаться внутри раздела или внутри самого документа.Различают название документа и заголовок раздела

Для конкретной Docutils NodeVisitor я создаю, мне нужно, чтобы иметь возможность различать текущий title узла является ли заголовок документа, или вместо того, чтобы в один из нескольких разделов в документе: если это на самом деле название в целом документ, я просто хочу пропустить этот заголовок и двигаться дальше.

я ожидал бы, чтобы быть в состоянии сделать это в Visitor.visit_title:

class DocumentTitleSkippingVisitor: 

    # … 

    def visit_title(self, node): 
     document_node = section_node.parent 
     if section_node is document_node: 
      # This title is actually the document's top level title. 
      raise self._docutils.nodes.SkipNode 

Это не работает, хотя: посетитель встречает верхний заголовок уровня документа внутри другого section узла. Из-за этого вышеуказанная проверка (правильно) говорит, что родителем title является не узел document.

Как я могу указать в пределах NodeVisitor, что title на самом деле является специальным названием документа? В качестве альтернативы, как я могу подключиться к Docutils так, что title на самом деле находится на уровне документа, чтобы легче отличить его от названия section?

ответ

0

Вы можете добавить visit_section и depart_section:

class DocumentTitleSkippingVisitor: 
    def __init__(self): 
     self.in_section = False 
    def visit_section(self, node): 
     self.in_section = True 
    def depart_section(self,node): 
     self.in_section = False 
    def visit_title(self, node): 
     if self.in_section: 
      pass # do something 

Для ReStructuredText нет способа указать название документа и субтитров в явном виде. В этом случае:

  • Вы можете первым применять DocTitle
  • Вы должны следовать алгоритм, используемый DocTitle, чтобы найти его.
+0

Вы подтвердили, что это сработает? Мой опыт подсказывает, что он потерпит неудачу таким же образом: посетитель встречает заголовок документа на уровне 'раздела'. – bignose