@@ -314,6 +314,9 @@ def visit_enumerated_list(self, node):
314314 type = enum_style .get (node ["enumtype" ], None )
315315 if type :
316316 new_node .set (moin_page .list_style_type , type )
317+ startvalue = node .get ("start" , 1 )
318+ if startvalue > 1 :
319+ new_node .set (moin_page .list_start , str (startvalue ))
317320 self .open_moin_page_node (new_node , node )
318321
319322 def depart_enumerated_list (self , node ):
@@ -434,10 +437,21 @@ def depart_image(self, node):
434437 self .close_moin_page_node ()
435438
436439 def visit_inline (self , node ):
437- pass
440+ classes = node ["classes" ]
441+ moin_node = moin_page .span
442+ attrib = {}
443+ if "ins" in classes :
444+ moin_node = moin_page .ins
445+ classes .remove ("ins" )
446+ if "del" in classes :
447+ moin_node = moin_page .del_
448+ classes .remove ("del" )
449+ if classes :
450+ attrib [html .class_ ] = " " .join (classes )
451+ self .open_moin_page_node (moin_node (attrib = attrib ))
438452
439453 def depart_inline (self , node ):
440- pass
454+ self . close_moin_page_node ()
441455
442456 def visit_label (self , node ):
443457 if self .status [- 1 ] == "footnote" :
@@ -529,6 +543,7 @@ def visit_paragraph(self, node):
529543 footnote_node = self .footnotes .get (self .footnote_lable , None )
530544 if footnote_node :
531545 # TODO: `node.astext()` ignores all markup!
546+ # "moin" footnotes support inline markup
532547 footnote_node .append (node .astext ())
533548 raise nodes .SkipNode
534549 self .open_moin_page_node (moin_page .p (), node )
@@ -538,10 +553,15 @@ def depart_paragraph(self, node):
538553 self .close_moin_page_node ()
539554
540555 def visit_problematic (self , node ):
541- pass
556+ if node .hasattr ("refid" ):
557+ refuri = f"#{ node ['refid' ]} "
558+ attrib = {xlink .href : refuri , html .class_ : "red" }
559+ self .open_moin_page_node (moin_page .a (attrib = attrib ), node )
560+ else :
561+ self .open_moin_page_node (moin_page .span (attrib = {html .class_ : "red" }))
542562
543563 def depart_problematic (self , node ):
544- pass
564+ self . close_moin_page_node ()
545565
546566 def visit_reference (self , node ):
547567 refuri = node .get ("refuri" , "" )
@@ -584,6 +604,7 @@ def visit_reference(self, node):
584604 return
585605
586606 if not allowed_uri_scheme (refuri ):
607+ # TODO: prepend "wiki.local" as in "moin_in"?
587608 self .visit_error (node )
588609 return
589610
@@ -678,9 +699,25 @@ def depart_superscript(self, node):
678699 self .close_moin_page_node ()
679700
680701 def visit_system_message (self , node ):
681- # we have encountered a parsing error, insert an error message
682- # TODO: also show error level and line number.
683- self .visit_admonition (node , "error" )
702+ # an element reporting a parsing issue (DEBUG, INFO, WARNING, ERROR, or SEVERE)
703+ # TODO: handle node['backrefs'] to <problematic> element.
704+ if node .get ("level" , 4 ) < 3 :
705+ self .visit_admonition (node , "caution" )
706+ else :
707+ self .visit_admonition (node , "error" )
708+ self .open_moin_page_node (moin_page .p ())
709+ self .open_moin_page_node (moin_page .strong (attrib = {html .class_ : "title" }))
710+ title = f"{ node ['type' ]} /{ node ['level' ]} "
711+ self .current_node .append (f"System Message: { title } " )
712+ self .close_moin_page_node () # </strong>
713+ if node .hasattr ("line" ):
714+ self .current_node .append (f" ({ node ['source' ]} line { node ['line' ]} ) " )
715+ if node .get ("backrefs" , []):
716+ backrefuri = f"#{ node ['backrefs' ][0 ]} "
717+ self .open_moin_page_node (moin_page .a (attrib = {xlink .href : backrefuri }), node )
718+ self .current_node .append ("backlink" )
719+ self .close_moin_page_node () # </a>
720+ self .close_moin_page_node () # </p>
684721
685722 def depart_system_message (self , node ):
686723 self .depart_admonition (node )
@@ -823,6 +860,8 @@ class Parser(docutils.parsers.rst.Parser):
823860 Registers a "transform__" for hyperlink references
824861 without matching target__.
825862
863+ Also register the "transforms" that are added by default for a Docutils writer.
864+
826865 __ https://docutils.sourceforge.io/docs/api/transforms.html
827866 __ https://docutils.sourceforge.io/docs/ref/doctree.html#target
828867 """
@@ -832,7 +871,13 @@ class Parser(docutils.parsers.rst.Parser):
832871
833872 def get_transforms (self ):
834873 """Add WikiReferences to the registered transforms."""
835- return super ().get_transforms () + [WikiReferences ]
874+ moin_parser_transforms = [
875+ WikiReferences ,
876+ transforms .universal .StripClassesAndElements ,
877+ transforms .universal .Messages ,
878+ transforms .universal .FilterMessages ,
879+ ]
880+ return super ().get_transforms () + moin_parser_transforms
836881
837882
838883class WikiReferences (transforms .Transform ):
0 commit comments