aboutsummaryrefslogtreecommitdiff
path: root/scripts/load_every_help.py
blob: c529e34888af5ecdeff02a21afe00eea68a1f0f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/python

import subprocess, sys, socket, time, os, re

try:
    pdrootdir = sys.argv[1]
except IndexError:
    print 'only one arg: root dir of pd'
    sys.exit(2)


bindir = pdrootdir + '/bin'
docdir = pdrootdir + '/doc/5.reference/maxlib'
pdexe = bindir + '/pd'
pdsendexe = bindir + '/pdsend'

PORT = 55555
netreceive_patch = '/tmp/.____pd_netreceive____.pd'


def make_netreceive_patch(filename):
    fd = open(filename, 'w')
    fd.write('#N canvas 222 130 454 304 10;')
    fd.write('#X obj 111 83 netreceive ' + str(PORT) + ' 0 old;')
    fd.write('#X obj 111 103 loadbang;')
    fd.write('#X obj 111 123 print netreceive_patch;')
    fd.write('#X connect 1 0 2 0;')
    fd.close()

def send_to_socket(message):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost', PORT))
    s.send(message)
    s.close()

def send_to_pd(message):
    send_to_socket('; pd ' + message + ';\n')

def open_patch(filename):
    dir, file = os.path.split(filename)
    send_to_pd('open ' + file + ' ' + dir)

def close_patch(filename):
    dir, file = os.path.split(filename)
    send_to_pd('; pd-' + file + ' menuclose')


def launch_pd():
    p = subprocess.Popen([pdexe, '-nogui', '-stderr', '-open', netreceive_patch],
                         stdout=subprocess.PIPE, stderr=subprocess.STDOUT, 
                         close_fds=True);
    line = p.stdout.readline()
    while line != 'netreceive_patch: bang\n':
        line = p.stdout.readline()
    return p

#---------- list of lines to ignore ----------#
def remove_ignorelines(list):
    ignorelines = [
        'expr, expr~, fexpr~ version 0.4 under GNU General Public License \n',
        'fiddle version 1.1 TEST4\n',
        'sigmund version 0.03\n',
        'pique 0.1 for PD version 23\n',
        'this is pddplink 0.1, 3rd alpha build...\n',
        '\n'
        ]
    ignorepatterns = [
        'ydegoyon@free.fr',
        'olaf.matthes@gmx.de',
        'Olaf.*Matthes',
        '[a-z]+ v0\.[0-9]',
        'IOhannes m zm',
        'part of zexy-'
        ]
    for ignore in ignorelines:
        try:
            list.remove(ignore)
        except ValueError:
            pass
    for line in list:
        for pattern in ignorepatterns:
            m = re.search('.*' + pattern + '.*', line)
            if m:
                try:
                    list.remove(m.string)
                except ValueError:
                    pass
    return list


#---------- main()-like thing ----------#

make_netreceive_patch(netreceive_patch)

mailoutput = []
for root, dirs, files in os.walk(docdir):
    #dirs.remove('.svn')
#    print "root: " + root
    for name in files:
        m = re.search(".*\.pd$", name)
        if m:
            patch = os.path.join(root, m.string)
            p = launch_pd()
            open_patch(patch)
            close_patch(patch)
            send_to_pd('quit')
            patchoutput = []
            line = p.stdout.readline()
            while line != 'EOF on socket 10\n':
                patchoutput.append(line) 
                line = p.stdout.readline()
            patchoutput = remove_ignorelines(patchoutput)
            if len(patchoutput) > 0:
                print 'loading: ' + name
                mailoutput.append('__________________________________________________')
                mailoutput.append('loading: ' + name)
                mailoutput.append('--------------------------------------------------')
                mailoutput.append(patchoutput)
                for line in patchoutput:
                    print '--' + line + '--'