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.
Pd-list@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.