[PD] Parsing Pd patches in Javascript, Python, Java

Hans-Christoph Steiner hans at at.or.at
Tue Nov 30 18:45:34 CET 2010


Sorry, I mean most of puredata info is a wiki, including the /docs/  
section.  You could just add a wiki page to the root, for example:

http://puredata.info/docs

.hc

On Nov 30, 2010, at 2:21 AM, Chris McCormick wrote:

> Hi Hans,
>
> Excellent, I will put it in there. Sorry to be dense, but could you  
> provide me
> with a link to the page in this wiki you speak of? Or is that the  
> Plone thing?
>
> Cheers,
>
> chris.
>
> On Mon, Nov 29, 2010 at 10:31:32PM -0500, Hans-Christoph Steiner  
> wrote:
>>
>> Sounds very useful, and would be great to have on the wiki,  
>> anywhere in
>> the docs/developer section, for example.
>>
>> .hc
>>
>> On Nov 28, 2010, at 11:46 PM, Chris McCormick wrote:
>>
>>> Hi,
>>>
>>> Here is how you can parse Pd patches into rows of atoms in three
>>> languages using regular expressions:
>>>
>>> /*** Javascript ***/
>>>
>>> 	var lines_re = new RegExp("(#((.|\r|\n)*?)[^\\\\])\r{0,1}\n{0,1};
>>> \r{0,1}\n", "gi");
>>>       for (pdline = lines_re.exec(patchtext)) {
>>>               var atoms = pdline[1].split(/ |\r\n?|\n/);
>>>       }
>>>
>>> ### Python ###
>>>
>>> 	lines_re = re.compile("(#(.*?)[^\\\])\r{0,1}\n{0,1};\r{0,1}\n",
>>> re.MULTILINE | re.DOTALL)
>>> 	split_re = re.compile(" |\r\n?|\n", re.MULTILINE)
>>> 	for found in lines_re.finditer(patch):
>>> 		line = found.group(1)
>>> 		atoms = split_re.split(line)
>>>
>>> /*** Java ***/
>>>
>>> 	private static final String line_re = "(#((.|\r|\n)*?)[^\\\\])
>>> \r{0,1}\n{0,1};\r{0,1}\n";
>>> 	private static final String token_re = " |\r\n?|\n";
>>> 	
>>> 	Pattern pattern = Pattern.compile(line_re, Pattern.MULTILINE);
>>> 	Pattern token_pattern = Pattern.compile(token_re,  
>>> Pattern.MULTILINE);
>>> 	Matcher matcher = pattern.matcher(patchtext);
>>> 	ArrayList<String[]> atomlines = new ArrayList<String[]>();
>>> 	while (matcher.find()) {
>>> 		String[] s = token_pattern.split(matcher.group(1));
>>> 		atomlines.add(token_pattern.split(matcher.group(1)));
>>> 	}
>>>
>>> Also here is a regular expression for matching dollar args:
>>>
>>> 	/(?:\\{0,1}\$)(\d+)/g;
>>>
>>> Hopefully this is useful to someone else.
>>>
>>> Cheers,
>>>
>>> Chris.
>>>
>>> -------------------
>>> http://mccormick.cx
>>>
>>> _______________________________________________
>>> Pd-list at iem.at mailing list
>>> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
>>
>>
>>
>>
>>
>> ----------------------------------------------------------------------------
>>
>> Programs should be written for people to read, and only  
>> incidentally for
>> machines to execute.
>> - from Structure and Interpretation of Computer Programs
>>
>>
>> _______________________________________________
>> Pd-list at iem.at mailing list
>> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
> -------------------
> http://mccormick.cx



----------------------------------------------------------------------------

Looking at things from a more basic level, you can come up with a more  
direct solution... It may sound small in theory, but it in practice,  
it can change entire economies.     - Amy Smith





More information about the Pd-list mailing list