PdParser
index
/var/www/mccormick.cx/dev/PyPd/PdParser.py

Parse Pd files and emit useful information.

 
Modules
       
re

 
Classes
       
PdParser
exceptions.Exception(exceptions.BaseException)
PdParserException

 
class PdParser
    Parse Pd files using user defined filters.
 
>>> p = PdParser("patches/parser-test.pd")
>>> def found(canvasStack, type, action, bits):
...   print "canvasStack:", canvasStack, "type:", type, "action:", action, "arguments:", bits
... 
>>> p.add_filter_method(found, canvas="REFERENCE", type="#X", action="text")
>>> p.add_filter_method(found, canvas="semicolon-test", type="#X", action="msg")
>>> p.add_filter_method(found, object="osc~")
>>> p.parse()
canvasStack: ['patches/parser-test.pd', 'REFERENCE'] type: #X action: text arguments: 135 336 Tags: tag_one \, tag_two
canvasStack: ['patches/parser-test.pd', 'REFERENCE'] type: #X action: text arguments: 115 301 Description: Some kind of verbose description here.
<BLANKLINE>
canvasStack: ['patches/parser-test.pd', 'REFERENCE'] type: #X action: text arguments: 114 121 Name: thing
canvasStack: ['patches/parser-test.pd', 'REFERENCE'] type: #X action: text arguments: 114 174 Argument 0: first argument (required)
canvasStack: ['patches/parser-test.pd', 'REFERENCE'] type: #X action: text arguments: 114 194 Argument 1: second argument (optional)
canvasStack: ['patches/parser-test.pd', 'REFERENCE'] type: #X action: text arguments: 114 214 Inlet 0: my first inlet is blah
canvasStack: ['patches/parser-test.pd', 'REFERENCE'] type: #X action: text arguments: 114 234 Inlet 1: msg1 <msg1arg>: what this message does. msg2
<msg2arg>: what this other message does \, default 0 which is the default
<BLANKLINE>
canvasStack: ['patches/parser-test.pd', 'REFERENCE'] type: #X action: text arguments: 114 278 Outlet 0: what comes out the second outlet.
canvasStack: ['patches/parser-test.pd', 'REFERENCE'] type: #X action: text arguments: 113 141 Summary: what this thing does is blah blah blah
canvasStack: ['patches/parser-test.pd'] type: #X action: obj arguments: 471 83 osc~ 220
canvasStack: ['patches/parser-test.pd', 'semicolon-test'] type: #X action: msg arguments: 10 18 this is a message box \, with comments \, and also \;
semicolons! yes it is. it's like this: yo. test \; test \; test \;
<BLANKLINE>
canvasStack: ['patches/parser-test.pd'] type: #X action: obj arguments: 633 213 osc~ 440
49
 
  Methods defined here:
__init__(self, filename)
>>> p = PdParser("patches/parser-test.pd")
add_filter_method(self, method, **kwargs)
The method will be called on each filter which matches for each line-element of the Pd file.
 
The method can be passed the following variables:
 The current canvas stack (an array), where the last element is the current canvas.
 The type, such as "#X", "#N", etc.
 The action, such as "canvas", "obj", "msg", "txt"
 The first argument (such as the actual object passed) like "osc~"
 The remaining arguments, as a string.
 
>>> def found(canvasStack, type, action, bits):
...   print "canvasStack:", canvasStack, "type:", type, "action:", action, "arguments:", bits
... 
 
For example:
 canvas = "REFERENCE" will fire the method on each line inside that canvas.
 type = "#X" will fire the method on each line which has a type of #X.
 action = "obj" will fire on each line which has an 'action' of "obj.
 object = "osc~" will fire on each line which has a first argument of 'obj~'
 
You can chain multiple of these in the filter.
For example, to find all comments in the subpatch called "REFERENCE":
 
>>> p = PdParser("patches/parser-test.pd")
>>> p.add_filter_method(found, canvas="REFERENCE", type="#X", action="text")
parse(self)
Trigger the actual parse.
 
>>> p = PdParser("patches/parser-test.pd")
>>> print p.parse(), "elements found"
49 elements found

 
class PdParserException(exceptions.Exception)
    
Method resolution order:
PdParserException
exceptions.Exception
exceptions.BaseException
__builtin__.object

Data descriptors defined here:
__weakref__
list of weak references to the object (if defined)

Methods inherited from exceptions.Exception:
__init__(...)
x.__init__(...) initializes x; see x.__class__.__doc__ for signature

Data and other attributes inherited from exceptions.Exception:
__new__ = <built-in method __new__ of type object at 0x8144920>
T.__new__(S, ...) -> a new object with type S, a subtype of T

Methods inherited from exceptions.BaseException:
__delattr__(...)
x.__delattr__('name') <==> del x.name
__getattribute__(...)
x.__getattribute__('name') <==> x.name
__getitem__(...)
x.__getitem__(y) <==> x[y]
__getslice__(...)
x.__getslice__(i, j) <==> x[i:j]
 
Use of negative indices is not supported.
__reduce__(...)
__repr__(...)
x.__repr__() <==> repr(x)
__setattr__(...)
x.__setattr__('name', value) <==> x.name = value
__setstate__(...)
__str__(...)
x.__str__() <==> str(x)

Data descriptors inherited from exceptions.BaseException:
__dict__
args
message
exception message

 
Functions
       
and_(...)
and_(a, b) -- Same as a & b.