fixed execution order bug that was causing the first two frame numbers to output...
[puredata.git] / scripts / parse-help-patches.pl
bloba96b16377a078d4f1ef8b5220760e55bfa982821
1 #!/usr/bin/perl
3 # WARNING! This script is really ugly!
5 # to use:
6 # 1) make a folder, like en-import
7 # 2) run ../parse-help-patches.pl in it
8 # 3) voila!
10 # on the server, run:
11 # find en-import/ -type f -name \*.txt | ./wiki_import.sh -s 'Top level'
13 use strict;
14 use warnings;
15 use Text::CSV_PP;
17 my $line = "";
18 my @lines;
19 my $lineCount = 0;
20 my $column;
21 my $lastColumn = 0;
22 my $printText = "";
24 my %classnames = ();
25 my %xyhash = ();
27 my $libraryName = "";
28 my $objectclassName = "";
29 my $fileName = "";
31 my $pageName = "";
32 my $abbreviationName = "";
33 my $descriptionName = "";
34 my $categoryName = "";
35 my $datatypeName = "";
37 #------------------------------------------------------------------------------#
38 # TRANSLATION VARIABLES
39 #------------------------------------------------------------------------------#
41 # wikipedia terms
42 my $stub = "";
43 my $template = "";
44 my $category = "";
45 my $infobox = "";
47 # pdpedia terms
48 my $objectclass = "";
50 # page headers
51 my $inlets = "";
52 my $outlets = "";
53 my $arguments = "";
54 my $messages = "";
56 # infobox
57 my $name = "";
58 my $description = "";
59 my $abbreviation = "";
60 my $library = "";
61 my $author = "";
62 my $developer = "";
63 my $releaseVersion = "";
64 my $releaseDate = "";
65 my $dependencies = "";
66 my $license = "";
67 my $website = "";
68 my $programmingLanguage = "";
69 my $platform = "";
70 my $operatingSystem = "";
71 my $language = "";
72 my $dataType = "";
73 my $distribution = "";
74 my $status = "";
75 my $caption = "";
77 #------------------------------------------------------------------------------#
78 # Français
80 # wikipedia terms
81 $stub = "Ébauche";
82 $template = "Modèle";
83 $category = "Catégorie";
84 $infobox = "Infos";
86 # pdpedia terms
87 $objectclass = "Classe d'objets";
89 # page headers
90 $inlets = "Entrées";
91 $outlets = "Sorties";
92 $arguments = "Arguments";
93 $messages = "Messages";
95 # infobox
96 $name = "Nom";
97 $description = "Description";
98 $abbreviation = "Abréviation";
99 $library = "Bibliothèque";
100 $author = "Auteur";
101 $developer = "Développeur";
102 $releaseVersion = "Version";
103 $releaseDate = "Date";
104 $dependencies = "Dépendances";
105 $license = "Licence";
106 $website = "Site Web";
107 $programmingLanguage = "Langage de programmation";
108 $platform = "Plate-forme";
109 $operatingSystem = "Système d'exploitation";
110 $language = "Langue";
111 $dataType = "Type de données";
112 $distribution = "Distribution";
114 $status = "État";
115 $caption = "Légende";
116 $language = "Langue";
121 #------------------------------------------------------------------------------#
122 # PARSE CSV
123 #------------------------------------------------------------------------------#
124 my $csvfile = '/Users/hans/Desktop/TODO/wiki_files_hacked/objectlist.csv';
125 my $csv = Text::CSV_PP->new();
126 my %csvhash = ();
128 open (CSV, "<", $csvfile) or die $!;
129 my @csvlines = split(/\012\015?|\015\012?/,(join '',<CSV>));
130 foreach (@csvlines) {
131 if ($csv->parse($_)) {
132 my @columns = $csv->fields();
133 $csvhash{ $columns[0] }{ $columns[2] } = "$columns[0],$columns[2],$columns[3],$columns[4],$columns[5],$columns[7]";
134 #print("$columns[0],$columns[2] | ");
135 } else {
136 my $err = $csv->error_input;
137 print "Failed to parse line: $err";
140 close CSV;
142 #------------------------------------------------------------------------------#
143 # PARSE HELP FILES
144 #------------------------------------------------------------------------------#
146 foreach (`/sw/bin/find /Users/hans/Desktop/TODO/wiki_files_hacked/5.reference/ -type f -name '*.pd'`) {
147 chop;
148 $fileName = "";
149 if( (m|.*/5\.reference/([a-zA-Z0-9_-]+)/(.+)-help\.pd|) || (m|.*/5\.reference/([a-zA-Z0-9_-]+)/(.+)\.pd|) ) {
150 # print("$1 , $2\t");
151 if( $1 eq 'zflatspace' ) { $libraryName = "flatspace";}
152 else {$libraryName = lc($1); }
153 $objectclassName = $2;
154 $fileName = $_;
157 # print "filename: $fileName\n";
158 if ($fileName) {
159 $printText = ""; # init container
160 %xyhash = (); # init sorting hash
162 open(HELPPATCH, "$fileName");
163 undef $/; # $/ defines the "end of record" character
164 $_ = <HELPPATCH>; # read the whole file into the scalar
165 close HELPPATCH;
166 $/ = "\n"; # Restore for normal behaviour later in script
168 s| \\||g; # remove Pd-style escaping
169 s|([^;])\n|$1 |g; # remove extra newlines
170 s|\(http://.*\)\([ \n]\)|[$1]$2|g;
172 @lines = split(';\n', $_);
174 foreach (@lines) {
175 if (m|^#X text ([0-9]+) ([0-9]+) (.*)|) {
176 $xyhash{ $2 }{ $1 } = $3;
177 # print("$lineCount @ $1,$2: $3\n");
179 $lineCount++;
181 for ($column = -300; $column < 1501; $column += 300) {
182 foreach my $yKey ( sort {$a <=> $b} keys(%xyhash) ) {
183 foreach my $xKey ( keys(%{$xyhash{$yKey}}) ) {
184 if ( ($xKey > $lastColumn) && ($xKey < $column) ) {
185 $printText .= "$xyhash{$yKey}{$xKey}\n\n";
186 #print("TEST $xKey,$yKey: $xyhash{$yKey}{$xKey}\n");
190 $lastColumn = $column;
193 my $myColumns = $csvhash{$libraryName}{$objectclassName};
194 my @myColumns;
195 if($myColumns) { @myColumns = split(',', $myColumns); }
196 if($myColumns[2]) { $abbreviationName = $myColumns[2]; } if( $classnames{$objectclassName} ) {
197 $pageName = "${objectclassName}_(${libraryName})";
198 } else {
199 $pageName = "${objectclassName}";
203 mkdir($libraryName);
204 if( $classnames{$objectclassName} ) {
205 $pageName = "${objectclassName}_(${libraryName})";
206 } else {
207 $pageName = "${objectclassName}";
209 open(OBJECTCLASS, ">$libraryName/${pageName}.txt");
210 print(OBJECTCLASS "{{Infobox $objectclass\n");
211 print(OBJECTCLASS "| $name = $objectclassName\n");
212 if($abbreviationName) {
213 print(OBJECTCLASS "| $abbreviation = $abbreviationName\n");}
214 print(OBJECTCLASS "| $description = \n");
215 print(OBJECTCLASS "| $dataType = \n");
216 print(OBJECTCLASS "| $library = [[$libraryName]]\n");
217 print(OBJECTCLASS "| $author = {{$libraryName " . lc(${author}) . "}}\n");
218 print(OBJECTCLASS "| $license = {{$libraryName " . lc(${license}) . "}}\n");
219 print(OBJECTCLASS "| $status = {{$libraryName " . lc(${status}) . "}}\n");
220 print(OBJECTCLASS "| $website = {{$libraryName " . lc(${website}) . "}}\n");
221 print(OBJECTCLASS "| $releaseVersion = {{$libraryName " . lc(${releaseVersion}) . "}}\n");
222 print(OBJECTCLASS "| $releaseDate = {{$libraryName " . lc(${releaseDate}) . "}}\n");
223 print(OBJECTCLASS "| $distribution = {{$libraryName " . lc(${distribution}) . "}}\n");
224 print(OBJECTCLASS "| $platform = [[GNU/Linux]], [[Mac OS X]], [[Windows]]\n");
225 print(OBJECTCLASS "}}\n\n");
226 # print(OBJECTCLASS "\n$printText\n\n\n");
227 print(OBJECTCLASS "==$inlets==\n\n\n");
228 print(OBJECTCLASS "==$outlets==\n\n\n");
229 print(OBJECTCLASS "==$arguments==\n\n\n");
230 # print(OBJECTCLASS "==$messages==\n\n\n");
231 print(OBJECTCLASS "{{${objectclass}-${stub}}} \n\n");
232 print(OBJECTCLASS "[[$category:$objectclass]]\n");
233 print(OBJECTCLASS "[[$category:$libraryName]]\n");
234 # if($category) {
235 # print(OBJECTCLASS "[[$category:$categoryName]]\n");
237 print(OBJECTCLASS "\n\n");
238 print(OBJECTCLASS "[[de:$pageName]]\n");
239 print(OBJECTCLASS "[[en:$pageName]]\n");
240 print(OBJECTCLASS "[[es:$pageName]]\n");
241 # print(OBJECTCLASS "[[fr:$pageName]]\n");
242 print(OBJECTCLASS "[[it:$pageName]]\n");
243 print(OBJECTCLASS "[[ja:$pageName]]\n");
244 print(OBJECTCLASS "[[nl:$pageName]]\n");
245 print(OBJECTCLASS "[[pt:$pageName]]\n");
246 print(OBJECTCLASS "[[ru:$pageName]]\n");
247 print(OBJECTCLASS "[[tr:$pageName]]\n");
248 print(OBJECTCLASS "\n\n");
249 close(OBJECTCLASS);
251 $classnames{$objectclassName} = 1;