#!/usr/bin/env python """ Dogtail script for generating unhelpful help file. Scours the UI of a program, and generates a parody of a help file for that program. The resulting DocBook file is simply a reading back of the program's UI to you. The idea is to highlight a gripe of mine (and many other people): documentation should be more than this! This script is licensed under the GPL. """ __author__ = 'David Malcolm <dmalcolm@redhat.com>' from dogtail.tree import * from dogtail.utils import * import sys def writePCDataElement(name, content): print '\t\t<%s>%s</%s>'%(name, content, name) # FIXME: escape the content def generateUnhelpfulHelp(appName): try: app = root.application(appName) except SearchError: run(appName) print '<?xml version="1.0"?>' print '<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">' print '<article>' taggedAppName = '<application>%s</application>'%appName # Artile info: print '\t<articleinfo>' writePCDataElement("title", "The Totally Definitive No-Nonsense Unhelpful Complete Guide to %s for Mannequins in 40 Days - Unleashed!"%taggedAppName) print '\t</articleinfo>' # Guts of the article: print '\t<sect1>' writePCDataElement("title", "Introduction") writePCDataElement("caution", "<para>Do not take these instructions seriously. They are a parody of unhelpful help files found on many computer systems, and were autogenerated by <application>no-help-at-all</application></para>") writePCDataElement("para", "You can start %s by opening a terminal and typing the <command>%s</command> command."%(taggedAppName, appName)) print '\t</sect1>' menus = app.findChildren(predicate.GenericPredicate(roleName="menu")) for menu in menus: print '\t<sect1>' writePCDataElement("title", "The <guimenu>%s</guimenu> menu"%menu.name) writePCDataElement("para", "Use the <guimenu>%s</guimenu> menu to work with %ss"%(menu.name, menu.name.lower())) items = menu.findChildren(predicate.GenericPredicate(roleName="menu item"), recursive=False) if items!=None: for item in items: verb = item.name noun = menu.name print '\t\t<sect2>' writePCDataElement("title", "%sing a %s"%(verb.title(), noun.lower())) writePCDataElement("para", "To %s a %s, choose <guimenu>%s</guimenu> > <guimenuitem>%s</guimenuitem>"%(verb.lower(), noun.lower(), menu.name, item.name)) print '\t\t</sect2>' print '\t</sect1>' print '</article>' if __name__=='__main__': try: generateUnhelpfulHelp(sys.argv[1]) except IndexError: print "####################################" print "please supply an application name on the cmdline" print "####################################"