]>
git.proxmox.com Git - mirror_novnc.git/blob - utils/parse.js
02ac66c203a0bd52cfbec0e89b4cb31c9b992555
1 // Utility to parse keysymdef.h to produce mappings from Unicode codepoints to keysyms
4 var fs
= require('fs');
6 var show_help
= process
.argv
.length
=== 2;
7 var use_keynames
= false;
10 for (var i
= 2; i
< process
.argv
.length
; ++i
) {
11 switch (process
.argv
[i
]) {
23 filename
= process
.argv
[i
];
29 console
.log("Error: No filename specified\n");
33 console
.log("Parses a *nix keysymdef.h to generate Unicode code point mappings");
34 console
.log("Usage: node parse.js [options] filename:");
35 console
.log(" -h [ --help ] Produce this help message");
36 console
.log(" -d [ --debug-names ] Preserve keysym names for debugging (Increases file size by ~40KB)");
37 console
.log(" filename The keysymdef.h file to parse");
41 // Set this to false to omit key names from the generated keysymdef.js
42 // This reduces the file size by around 40kb, but may hinder debugging
44 var buf
= fs
.readFileSync(filename
);
45 var str
= buf
.toString('utf8');
47 var re
= /^\#define XK_([a-zA-Z_0-9]+)\s+0x([0-9a-fA-F]+)\s*(\/\*\s*(.*)\s*\*\/)?\s*$/m;
49 var arr
= str
.split('\n');
54 for (var i
= 0; i
< arr
.length
; ++i
) {
55 var result
= re
.exec(arr
[i
]);
57 var keyname
= result
[1];
58 var keysym
= parseInt(result
[2], 16);
59 var remainder
= result
[3];
61 keysyms
[keysym
] = keyname
;
63 var unicodeRes
= /U\+([0-9a-fA-F]+)/.exec(remainder
);
65 var unicode
= parseInt(unicodeRes
[1], 16);
66 if (!codepoints
[unicode
]){
67 codepoints
[unicode
] = keysym
;
71 console
.log("no unicode codepoint found:", arr
[i
]);
75 console
.log("line is not a keysym:", arr
[i
]);
79 var out
= "// This file describes mappings from Unicode codepoints to the keysym values\n" +
80 "// (and optionally, key names) expected by the RFB protocol\n" +
81 "// How this file was generated:\n" +
82 "// " + process
.argv
.join(" ") + "\n" +
83 "var keysyms = (function(){\n" +
84 " \"use strict\";\n" +
85 " var keynames = {keysyms};\n" +
86 " var codepoints = {codepoints};\n" +
88 " function lookup(k) { return k ? {keysym: k, keyname: keynames ? keynames[k] : k} : undefined; }\n" +
90 " fromUnicode : function(u) { return lookup(codepoints[u]); },\n" +
91 " lookup : lookup\n" +
94 out
= out
.replace('{keysyms}', use_keynames
? JSON
.stringify(keysyms
) : "null");
95 out
= out
.replace('{codepoints}', JSON
.stringify(codepoints
));
97 fs
.writeFileSync("keysymdef.js", out
);