| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /* jshint esversion: 6 */
- /* eslint "indent": [ "error", 4, { "SwitchCase": 1 } ] */
- /* eslint "no-console": off */
- const fs = require('fs');
- const process = require('process');
- const pattern = process.argv[2];
- const file = process.argv[3];
- const variable = process.argv[4];
- const type = process.argv[5];
- const count = parseInt(process.argv[6]);
- let arrayType = '';
- let dataViewMethod = '';
- let shift = 0;
- switch (type) {
- case 'float':
- arrayType = 'Float32Array';
- dataViewMethod = 'getFloat32';
- shift = '2';
- break;
- case 'double':
- arrayType = 'Float64Array';
- dataViewMethod = 'getFloat64';
- shift = '3';
- break;
- default:
- console.log('ERROR: Type is not supported.');
- process.exit(1);
- break;
- }
- const source = fs.readFileSync(file, 'utf-8');
- let search = '';
- let replace = '';
- switch (pattern) {
- case 'array':
- search = `if ((tag & 7) === 2) {
- var end2 = reader.uint32() + reader.pos;
- while (reader.pos < end2)
- message.$(variable).push(reader.$(type)());
- } else`;
- replace = `if ((tag & 7) === 2) {
- var end2 = reader.uint32() + reader.pos;
- if (message.$(variable).length == 0 && (end2 - reader.pos) > 1048576) {
- var $(variable)Length = end2 - reader.pos;
- var $(variable)View = new DataView(reader.buf.buffer, reader.buf.byteOffset + reader.pos, $(variable)Length);
- $(variable)Length = $(variable)Length >>> $(shift);
- var $(variable) = new $(arrayType)($(variable)Length);
- for (var i = 0; i < $(variable)Length; i++) {
- $(variable)[i] = $(variable)View.$(dataViewMethod)(i << $(shift), true);
- }
- message.$(variable) = $(variable);
- reader.pos = end2;
- }
- else {
- while (reader.pos < end2)
- message.$(variable).push(reader.$(type)());
- }
- } else`;
- break;
- case 'enumeration':
- search = `if (!(message.$(variable) && message.$(variable).length))
- message.$(variable) = [];
- if ((tag & 7) === 2) {
- var end2 = reader.uint32() + reader.pos;
- while (reader.pos < end2)
- message.$(variable).push(reader.$(type)());
- } else
- message.$(variable).push(reader.$(type)());
- break;`;
- replace = `if (!(message.$(variable) && message.$(variable).length)) {
- if (message.$(variable) != -1) {
- message.$(variable) = [];
- message.$(variable)Count = 0;
- }
- }
- if (message.$(variable)Count < 1000000) {
- if ((tag & 7) === 2) {
- var end2 = reader.uint32() + reader.pos;
- while (reader.pos < end2) {
- message.$(variable).push(reader.$(type)());
- message.$(variable)Count++;
- }
- }
- else {
- message.$(variable).push(reader.$(type)());
- message.$(variable)Count++;
- }
- }
- else {
- message.$(variable) = -1;
- if ((tag & 7) === 2) {
- var endx = reader.uint32() + reader.pos;
- while (reader.pos < endx)
- reader.$(type)();
- }
- else {
- reader.$(type)();
- }
- }
- break;`;
- break;
- default:
- console.log('ERROR: Unknown pattern.')
- process.exit(1);
- }
- search = search.split('$(variable)').join(variable);
- search = search.split('$(type)').join(type);
- replace = replace.split('$(variable)').join(variable);
- replace = replace.split('$(type)').join(type);
- replace = replace.split('$(arrayType)').join(arrayType);
- replace = replace.split('$(dataViewMethod)').join(dataViewMethod);
- replace = replace.split('$(shift)').join(shift);
- for (let i = 0; i < 8; i++) {
- search = search.split('\n').map((line) => ' ' + line).join('\n');
- replace = replace.split('\n').map((line) => ' ' + line).join('\n');
- const parts = source.split(search);
- if (parts.length == (count + 1)) {
- const target = parts.join(replace);
- fs.writeFileSync(file, target, 'utf-8');
- process.exit(0);
- }
- }
- console.log('ERROR: Replace failed.');
- process.exit(1);
|