-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbuild.js
72 lines (59 loc) · 1.96 KB
/
build.js
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
var fs = require('fs');
var inputFile = 'messages';
var language = 'en';
if(process.argv[2]) {
language = process.argv[2];
}
inputFile += '_' + language + '.str';
console.log("Processing file " + inputFile);
fs.readFile(inputFile, {encoding: 'ascii'}, function(err, data) {
if (err) {
throw err;
}
var outputFile = 'progmemStrings.h';
fs.writeFileSync(outputFile,
"// DO NOT EDIT THIS FILE. It was generated from " + inputFile
+ " by running the command 'node build.js " + language + "'\n\n#include <avr/pgmspace.h>\n\n",
{encoding: 'ascii'});
var lines = data.split('\u000a');
var messages = "const char* const messages[] PROGMEM = {\n ";
var array = "const char* const messages[] PROGMEM = {";
lines.pop();
var count = 0;
for(var i = 0 ; i < lines.length; i++) {
if (!lines[i].length || lines[i][0] === '#') {
continue;
}
var elements = lines[i].split(' ');
var name = elements.shift();
var value = elements.join(' ');
var varNameElements = name.toLowerCase().split('_');
var varName = varNameElements.shift();
while(varNameElements.length) {
var next = varNameElements.shift();
varName += next[0].toUpperCase() + next.substr(1);
}
// Bug in GSM module cuts messages at lowercase 'w'
// Make sure we don't have any lowercase 'w'
// http://forum.arduino.cc/index.php?topic=269661.0
value = value.replace(/w/g, 'W');
if (name != '') {
fs.appendFileSync(outputFile,
"const char " + varName + "[] PROGMEM = {" + value + "};\n"
+ "#define " + name + " " + count + "\n",
{encoding: 'ascii'});
messages += varName;
if (i < lines.length-1) {
messages += ", ";
}
if ((count + 1)%5 == 0) {
messages += "\n ";
}
count ++;
}
}
messages += "\n};";
fs.appendFileSync(outputFile,
messages,
{encoding: 'ascii'});
});