Merge branch 'master' of ssh://repo.or.cz/srv/git/sgc2
[sgc2.git] / tables2scripts.praat
blob2509b0c684d4c15fe6de188616545fb8ff0eaf4e
2 # tables2scripts
3
4 #     Praat script converting .Table files into praat scripts
5 #     
6 #     Copyright (C) 2010  R.J.J.H. van Son and the Netherlands Cancer Institute
7
8 #     This program is free software; you can redistribute it and/or modify
9 #     it under the terms of the GNU General Public License as published by
10 #     the Free Software Foundation; either version 2 of the License, or
11 #     (at your option) any later version.
12
13 #     This program is distributed in the hope that it will be useful,
14 #     but WITHOUT ANY WARRANTY; without even the implied warranty of
15 #     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 #     GNU General Public License for more details.
17
18 #     You should have received a copy of the GNU General Public License
19 #     along with this program; if not, write to the Free Software
20 #     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
21
23 # form Source directory and target file
24 #       sentence Source_directory       Data
25 #       sentence Target_file    CreateTables.praat
26 # endform
28 Text writing preferences... UTF-8
30 source_directory$ = "Data"
31 target_file$ = "CreateTables.praat"
32 call tables2scripts "'source_directory$'" 'target_file$'
34 source_directory$ = "wordlists"
35 target_file$ = "CreateWordlists.praat"
36 call tables2scripts "'source_directory$'" 'target_file$'
38 # Definitions
39 procedure tables2scripts .sourceDir$ .targetFile$
40         # Iterate over all tables in the directory
41         if fileReadable(.sourceDir$)
42                 deleteFile(.targetFile$)
43                 # Start new file
44                 fileappend '.targetFile$' # 'target_file$''newline$'
45                 fileappend '.targetFile$' # 'newline$'
46                 fileappend '.targetFile$' # Automatically created code!'newline$'
47                 fileappend '.targetFile$' # Any changes will be lost when this file is regenerated.'newline$'
48                 fileappend '.targetFile$' # Adapt the original Tables instead of this code.'newline$'
49                 fileappend '.targetFile$' # To regenerate the original Tables, run a Praat script'newline$'
50                 fileappend '.targetFile$' # with the following code:'newline$'
51                 fileappend '.targetFile$' # 'newline$'
52                 fileappend '.targetFile$' #: include tables2scripts.praat'newline$'
53                 fileappend '.targetFile$' #: call Create<TableName>'newline$'
54                 fileappend '.targetFile$' #: Write to table file... <TableName>.Table'newline$'
55                 fileappend '.targetFile$' # 'newline$'
56                 fileappend '.targetFile$' # Where <TableName> is the name of the table.'newline$'
57                 fileappend '.targetFile$' # Move the Table file to the desired location (eg, Data/)'newline$'
58                 fileappend '.targetFile$' # 'newline$'
59                 fileappend '.targetFile$' # Tables and this code are licensed under the GNU GPL version 2'newline$'
60                 fileappend '.targetFile$' # or later.'newline$'
61                 fileappend '.targetFile$' # 'newline$'
62                 
63                 # 
64                 .nameStart = rindex(.targetFile$, "/")+1
65                 .nameEnd = rindex(.targetFile$, ".") -.nameStart
66                 .newTableNameList$ = mid$(.targetFile$, .nameStart, .nameEnd)
67                 Create Table with column names... '.newTableNameList$' 0 Name
69                 # Create a list of Tables with Paths
70                 Create Table with column names... ListOfTables 0 Name Directory
71                 recursion = 0
72                 call createListOfTables ListOfTables '.sourceDir$'
73         
74                 select Table ListOfTables
75            .numOfTables = Get number of rows
76                 for .i to .numOfTables
77                          select Table ListOfTables
78                         .table$ = Get value... '.i' Name
79                         .tableDir$ = Get value... '.i' Directory
80                         # Get Table
81                         Read from file... '.tableDir$'/'.table$'
82                         .tableName$ = selected$("Table")
83                         if .tableName$ = "wordlist" or .tableName$ = "table"
84                                 .nameStart = rindex(.tableDir$, "/")+1
85                                 .nameEnd = length(.tableDir$)+1 -.nameStart
86                                 .newTableName$ = mid$(.tableDir$, .nameStart, .nameEnd)
87                                 select Table '.tableName$'
88                                 Rename... '.newTableName$'
89                                 .tableName$ = selected$("Table")
90                         endif
92                         select Table '.newTableNameList$'
93                         Append row
94                         .currentTableNum = Get number of rows
95                         Set string value... '.currentTableNum' Name '.tableName$'
97                         # Convert table
98                         call table2procedure '.tableName$' '.targetFile$'
99                         select Table '.tableName$'
100                         Remove
101                 endfor
103                 # Convert table
104                 call table2procedure '.newTableNameList$' '.targetFile$'
106                 select Table '.newTableNameList$'
107                 plus Table ListOfTables
108                 Remove
109         else
110                 exit Directory not found: '.sourceDir$'
111         endif
112 endproc
114 # Convert a single table to a Praat script
115 procedure table2procedure .tableName$ .targetFile$
116         select Table '.tableName$'
117         
118         .space$ = " "
119         # Collect information
120         .numberOfColumns = Get number of columns
121         .numberOfRows = Get number of rows
122                 
123         # Start output
124         fileappend '.targetFile$' procedure Create'.tableName$''newline$'
125         # Create table with columns
126         fileappend '.targetFile$' 'tab$'Create Table with column names... '.tableName$' '.numberOfRows''newline$'
127         fileappend '.targetFile$' 'tab$'...
128         for .col to .numberOfColumns
129                 .colName$ = Get column label... '.col'
130                 fileappend '.targetFile$' '.space$''.colName$'
131         endfor
132         fileappend '.targetFile$' 'newline$'
133         fileappend '.targetFile$' 'tab$'# Fill table values'newline$'
135         # Fill the table
136         for .row to .numberOfRows
137                 fileappend '.targetFile$' 'tab$'# Row '.row''newline$'
138                 for .col to .numberOfColumns
139                         .label$ = Get column label... '.col'
140                         .value$ = Get value... '.row' '.label$'
141                         fileappend '.targetFile$' 'tab$'Set string value... '.row' '.label$' '.value$''newline$'
142                 endfor
143         endfor
145         fileappend '.targetFile$' endproc'newline$'
146 endproc
148 # .listName$ is name of table to recieve all file names
149 # Labels are Name and Directory
150 # Who says you cannot do recursion in Praat?
151 # This is earily fragile code.
152 recursion = 0
153 procedure createListOfTables .listName$ .topDirectory$
154         recursion += 1
155         .listName'recursion'$ = .listName$
156         .topDirectory'recursion'$ = .topDirectory$
157         # Files
158         .currentTopDirectory$ = .topDirectory'recursion'$
159     Create Strings as file list... Files '.currentTopDirectory$'/*.Table
160         .numOfFiles'recursion' = Get number of strings
161         for .i to .numOfFiles'recursion'
162                 select Strings Files
163                 .table'recursion'$ = Get string... '.i'
164                 
165                 .currentListName$ = .listName'recursion'$
166                 select Table '.currentListName$'
167                 Append row
168                 .numRows = Get number of rows
169                 .currentTable$ = .table'recursion'$
170                 .currentTopDirectory$ = .topDirectory'recursion'$
171                 Set string value... '.numRows' Name '.currentTable$'
172                 Set string value... '.numRows' Directory '.currentTopDirectory$'
173         endfor
174         select Strings Files
175         Remove
176         # Recurse into directories
177         .currentTopDirectory$ = .topDirectory'recursion'$
178     Create Strings as directory list... Directories '.currentTopDirectory$'
179         .numOfDirectories'recursion' = Get number of strings
180         for .i'recursion' to .numOfDirectories'recursion'
181                 select Strings Directories
182                 .currentI = .i'recursion'
183                 .directory'recursion'$ = Get string... '.currentI'
184                 .currentTopDirectory$ = .topDirectory'recursion'$
185                 .currentDirectory$ = .directory'recursion'$
186                 call createListOfTables '.listName$' '.currentTopDirectory$'/'.currentDirectory$'
187         endfor
188         select Strings Directories
189         Remove
190         recursion -= 1
191 endproc