"Closing view crashes Python" plus some new features:
    New feature added to the IDE is 'Extensions'.  Under
    Tools|Options|Extensions, you can add calls to external programs.
    For example you can add a "Notepad" extension (under windows) that
    will exec Notepad on the currently open file.  A new "Notepad"
    menu item will appear under the Tools menu.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34638 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#----------------------------------------------------------------------------
 | 
						|
# Name:         xmlprettyprinter.py
 | 
						|
# Purpose:
 | 
						|
#
 | 
						|
# Author:       John Spurling
 | 
						|
#
 | 
						|
# Created:      9/21/04
 | 
						|
# CVS-ID:       $Id$
 | 
						|
# Copyright:    (c) 2004-2005 ActiveGrid, Inc.
 | 
						|
# License:      wxWindows License
 | 
						|
#----------------------------------------------------------------------------
 | 
						|
import xml.sax
 | 
						|
from activegrid.util.lang import *
 | 
						|
 | 
						|
class XMLPrettyPrinter(xml.sax.ContentHandler):
 | 
						|
    def __init__(self, indentationChar='    ', newlineChar='\n'):
 | 
						|
        self.xmlOutput = ''
 | 
						|
        self.indentationLevel = 0
 | 
						|
        self.indentationChar = indentationChar
 | 
						|
        self.elementStack = []
 | 
						|
        self.newlineChar = newlineChar
 | 
						|
        self.hitCharData = False
 | 
						|
 | 
						|
    ## ContentHandler methods
 | 
						|
    def startElement(self, name, attrs):
 | 
						|
        indentation = self.newlineChar + (self.indentationChar * self.indentationLevel)
 | 
						|
        # build attribute string
 | 
						|
        attrstring = ''
 | 
						|
        for attr in attrs.getNames():
 | 
						|
            value = attrs[attr]
 | 
						|
            attrstring += ' %s="%s"' % (attr, value)
 | 
						|
        self.xmlOutput += '%s<%s%s>' % (indentation, name, attrstring)
 | 
						|
        self.indentationLevel += 1
 | 
						|
        self.elementStack.append(name)
 | 
						|
        self.hitCharData = False
 | 
						|
 | 
						|
    def characters(self, content):
 | 
						|
##        print "--> characters(%s)" % content
 | 
						|
        self.xmlOutput += content
 | 
						|
        self.hitCharData = True
 | 
						|
 | 
						|
    def endElement(self, name):
 | 
						|
        self.indentationLevel -= 1
 | 
						|
        indentation = ''
 | 
						|
        if not self.hitCharData:
 | 
						|
            indentation += self.newlineChar + (self.indentationChar * self.indentationLevel)
 | 
						|
##            indentation += self.indentationChar * self.indentationLevel
 | 
						|
        else:
 | 
						|
            self.hitCharData = False
 | 
						|
##        self.xmlOutput += '%s</%s>%s' % (indentation, self.elementStack.pop(), self.newlineChar)
 | 
						|
        self.xmlOutput += '%s</%s>' % (indentation, self.elementStack.pop())
 | 
						|
 | 
						|
    def getXMLString(self):
 | 
						|
        return self.xmlOutput[1:]
 | 
						|
 | 
						|
def xmlprettyprint(xmlstr, spaces=4):
 | 
						|
    xpp = XMLPrettyPrinter(indentationChar=' ' * spaces)
 | 
						|
    xml.sax.parseString(xmlstr, xpp)
 | 
						|
    return xpp.getXMLString()
 | 
						|
 | 
						|
if isMain(__name__):
 | 
						|
    simpleTestString = """<one>some text<two anattr="booga">two's data</two></one>"""
 | 
						|
    print xmlprettyprint(simpleTestString)
 | 
						|
 |