SEMToMediaWiki.py
From Slicer Wiki
Revision as of 14:12, 7 June 2010 by Hjmjohnson (talk | contribs) (Created page with '<pre> #!python # \author Hans J. Johnson # # \description This python script is to help convert from # SEM xml documentation to a form suitable for posting on # a MediaWiki form…')
Home < SEMToMediaWiki.py
#!python
# \author Hans J. Johnson
#
# \description This python script is to help convert from
# SEM xml documentation to a form suitable for posting on
# a MediaWiki format
#
# \usage python SEMToMediaWiki.py myProgramSEM.xml > MediaWikiFormattedText.txt
#
import sys
import pprint
import xml.dom.minidom
from xml.dom.minidom import Node
# Get this nodes text information.
def getTextValuesFromNode(nodelist):
rc = []
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc.append(node.data)
return ''.join(rc)
# Create a formatted text string suitable for inclusion in a MediaWiki table
def getThisNodesInfoAsTextTableLine(executableNode,label):
labelNodeList=executableNode.getElementsByTagName(label)
if labelNodeList.length > 0 :
labelNode=labelNodeList[0] ## Only get the first one
print "|Program %s || %s\n" % (label,getTextValuesFromNode(labelNode.childNodes) )
print "|-"
# Only get the text info for the matching label at this level of the tree
def getThisNodesInfoAsText(executableNode,label):
labelNodeList=executableNode.getElementsByTagName(label)
if labelNodeList.length > 0 :
labelNode=labelNodeList[0] ## Only get the first one
return getTextValuesFromNode(labelNode.childNodes);
return ""
# Extract the long flag, and color the text string
def getLongFlagDefinition(executableNode):
labelNodeList=executableNode.getElementsByTagName("longflag")
if labelNodeList.length > 0 :
labelNode=labelNodeList[0] ## Only get the first one
return "[<span style=\"color:orange\">--"+getTextValuesFromNode(labelNode.childNodes)+"</span>]";
return "";
# Extract the (short) flag, and color the text string
def getFlagDefinition(executableNode):
labelNodeList=executableNode.getElementsByTagName("flag")
if labelNodeList.length > 0 :
labelNode=labelNodeList[0] ## Only get the first one
return "[<span style=\"color:pink\">-"+getTextValuesFromNode(labelNode.childNodes)+"</span>]";
return "";
# Extract the nodes label, and color the text string
def getLabelDefinition(executableNode):
labelNodeList=executableNode.getElementsByTagName("label")
if labelNodeList.length > 0 :
labelNode=labelNodeList[0] ## Only get the first one
return "** <span style=\"color:green\">'''"+getTextValuesFromNode(labelNode.childNodes)+"'''</span>";
return "";
## Read the xml file from the first argument of command line
doc = xml.dom.minidom.parse(sys.argv[1]);
# Get the primary heirarchial tree node.
executableNode=doc.getElementsByTagName("executable")[0]
# Print information about the program in general
print "===Module Type & Category===\n"
print "Type: CLI\n"
print "Category: %s\n" % getThisNodesInfoAsText(executableNode,"category")
print "\n"
print "===Authors, Collaborators & Contact===\n"
print "Author: %s\n" % getThisNodesInfoAsText(executableNode,"contributor")
print "Contributors: %s\n" % getThisNodesInfoAsText(executableNode,"acknowledgements")
print "\n"
print "===Module Description===\n"
print "{| style=\"color:green\" border=\"1\"\n"
getThisNodesInfoAsTextTableLine(executableNode,"title")
getThisNodesInfoAsTextTableLine(executableNode,"descripition")
getThisNodesInfoAsTextTableLine(executableNode,"version")
getThisNodesInfoAsTextTableLine(executableNode,"documentation-url")
getThisNodesInfoAsTextTableLine(executableNode,"doesnotexiststest")
print "|}\n"
# Now print all the command line arguments and the labels that showup in the GUI interface
for parameterNode in executableNode.getElementsByTagName("parameters"):
print "* <span style=\"color:blue\">'''''%s''''' </span> %s" % (getThisNodesInfoAsText(parameterNode,"label"),getThisNodesInfoAsText(parameterNode,"description"))
currentNode = parameterNode.firstChild
while currentNode is not None :
if currentNode.nodeType == currentNode.ELEMENT_NODE:
if getThisNodesInfoAsText(currentNode,"label") != "": #If this node doe not have a "label" element, then just skip it.
print "%s %s %s: %s" % (getLabelDefinition(currentNode), getLongFlagDefinition(currentNode),getFlagDefinition(currentNode),getThisNodesInfoAsText(currentNode,"description"))
currentNode=currentNode.nextSibling