jParser: рдмрд╛рдЗрдирд░реА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

jParser рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред


рдПрдкреАрдЖрдИ

рдкреНрд░рд╛рдердорд┐рдХ рд╕рдВрд░рдЪрдирд╛рдПрдВ:


JParser рд╡рд┐рдзрд┐рдпрд╛рдБ:


рдЬреЗрдкреАрд╕рд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛:



рдЙрджрд╛рд╣рд░рдг


C рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛

рдЖрдк рд╕реА-рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝реАрд▓реНрдб рдбреЗрдЯрд╛ рдирд╛рдо рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдорд╛рди рдкреНрд░рдХрд╛рд░ рд╣реИрдВред

var parser = new jParser(file, { header: { fileId: 'int32', recordIndex: 'int32', hash: ['array', 'uint32', 4], fileName: ['string', 256], } }); parser.parse('header'); // { // fileId: 42, // recordIndex: 6002, // hash: [4237894687, 3491173757, 3626834111, 2631772842], // fileName: ".\\Resources\\Excel\\Items_Weapons.xls" // } 


рд╕рдВрджрд░реНрдн

рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдЕрдиреНрдп рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реНрд╡ Warcraft рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдпреБрдХреНрдд рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:

 nofs: { count: 'uint32', offset: 'uint32' }, animationBlock: { interpolationType: 'uint16', globalSequenceID: 'int16', timestamps: 'nofs', keyFrame: 'nofs' }, uvAnimation: { translation: 'animationBlock', rotation: 'animationBlock', scaling: 'animationBlock' } 


рд╣реЗрд▓реНрдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ

рдирдП рдкреНрд░рд╛рдердорд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЖрдк рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдлреНрд▓реЛрдЯ 3 ) рдпрд╛ рд╕рд░рдгрд┐рдпрд╛рдБ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдлреНрд▓реЛрдЯ 4 )ред рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдирдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рдердорд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рддрд░реАрдХрд╛ (рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ hex32 рдФрд░ string0 ):

 float3: { x: 'float32', y: 'float32', z: 'float32' }, float4: ['array', 'float32', 4], hex32: function () { return '0x' + this.parse('uint32').toString(16); }, string0: function (length) { return this.parse(['string', length]).replace(/\0+$/g, ''); } 


рдлреАрдбрдмреИрдХ

рдпрджрд┐ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХреА рдЬрдЧрд╣ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреВрд░реНрдгрд╛рдВрдХ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдЖрдк рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЬрд╛ рд░рд╣реА рд╡рд╕реНрддреБ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рдкреНрдд рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдПред

 image: { width: 'uint8', height: 'uint8', pixels: [ 'array', ['array', 'rgba', function () { return this.current.width; }], function () { return this.current.height; } ] } 


рдЙрдиреНрдирдд рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

JParser рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЗ рдХреЛрдб рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг рдХреЛ рдЕрд▓рдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЬрдЯрд┐рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

 entryHeader: { start: 'int32', count: 'int32' }, entry: function (type) { var that = this; var header = this.parse('entryHeader'); var res = []; this.seek(header.start, function () { for (var i = 0; i < header.count; ++i) { res.push(that.parse(type)); } }); return res; }, name: { language: 'int32', text: ['string', 256] }, file: { names: ['entry', 'name'] } 


рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ


NodeJS рдЗрдВрдЬрди рдкрд░

рдмрд╕ jParser рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП npm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдФрд░ рдЖрдк рддреИрдпрд╛рд░ рд╣реИрдВ :-)

 npm install jParser 

 var fs = require('fs'); var jParser = require('jParser'); fs.readFile('file.bin', function (err, data) { var parser = new jParser(data, { magic: ['array', 'uint8', 4] }); console.log(parser.parse('magic')); }); 


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ

рдореИрдВрдиреЗ jQuery рдХреЛ рдкреИрдЪ рдХрд┐рдпрд╛ , рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓реЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕ рдкреИрдЪ рдХрд┐рдП рдЧрдП jQuery рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣реА jDataView рдФрд░ jParser рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ - рдФрд░ рдЖрдк рддреИрдпрд╛рд░ рд╣реИрдВ :-)

 <script src="https://raw.github.com/vjeux/jDataView/master/jquery/jquery-1.7.1-binary-ajax.js"></script> <script src="https://raw.github.com/vjeux/jDataView/master/src/jdataview.js"></script> <script src="https://raw.github.com/vjeux/jParser/master/src/jparser.js"></script> <script> $.get('file.bin', function (data) { var parser = new jParser(data, { magic: ['array', 'uint8', 4] }); console.log(parser.parse('magic')); }, 'dataview'); </script> 


рд╕рд╛рд╡рдзрд╛рдирд┐рдпреЛрдВ


рдпрд╣ рдЙрдкрдХрд░рдг рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдПрдХ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдлрд╝реАрд▓реНрдб рдХреЛ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рдЯреНрд░реИрд╡рд░реНрд╕ рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреНрд░реЛрдо рдФрд░ рдУрдкреЗрд░рд╛ рдореЗрдВ, рдпрд╣ рдирд┐рд╣рд┐рдд рдирд┐рдпрдо рдбрд┐рдЬрд┐рдЯрд▓ рдирд╛рдо рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╕рднреА рдореМрдЬреВрджрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдЗрди рджреЛ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:



рдбреЗрдореЛ


ICO рд╡рд┐рд╢реНрд▓реЗрд╖рдг ред рдпрд╣ NodeJS рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп рдХрд┐рддрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред


рдЕрдирдкреИрдХ рдЯрд╛рд░ ред рдпрд╣ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред


Warcraft рдореЙрдбрд▓ рд╢рд╛рд╡рд░ рдХреА рджреБрдирд┐рдпрд╛ ред рддреАрди-рдЖрдпрд╛рдореА рдореЙрдбрд▓ рдХреЗ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП jParser рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebGLред


[рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ]

рдбрд┐рдпрд╛рдмреНрд▓реЛ 3 рдЖрдВрддрд░рд┐рдХ рдлрд╝рд╛рдЗрд▓реЗрдВ

Source: https://habr.com/ru/post/In144008/


All Articles