jParser рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
- рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИред
- рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЧреИрд░-рддреБрдЪреНрдЫ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдХреНрдпрд╛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред
- jParser рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ NodeJS рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ jDataView рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдПрдкреАрдЖрдИ
рдкреНрд░рд╛рдердорд┐рдХ рд╕рдВрд░рдЪрдирд╛рдПрдВ:
- рдирд┐рд░реБрдкрд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ: uint8, uint16, uint32
- рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде: int8, int16, int32
- рдЖрдВрд╢рд┐рдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ: рдлреНрд▓реЛрдЯ 32, рдлреНрд▓реЛрдЯ64
- рд╕реНрдЯреНрд░рд┐рдВрдЧ: рдЪрд╛рд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ (рд▓реЗрди)
- рд╕рд░рдгреА: рд╕рд░рдгреА (рдкреНрд░рдХрд╛рд░, рд▓реЗрди)
- рд╕реНрдерд┐рддрд┐: рдмрддрд╛рдУ, рдЫреЛрдбрд╝реЗрдВ (рд▓реЗрди), рддрд▓рд╛рд╢ (рдкреАрдУрдПрд╕), рддрд▓рд╛рд╢ (рдкреАрдУрдПрд╕, рдлрдВрдХ)
JParser рд╡рд┐рдзрд┐рдпрд╛рдБ:
- рдкрд╛рд░реНрд╕ (рдореВрд▓реНрдп) - рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:
- рдлрд╝рдВрдХреНрд╢рди: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ;
- рд╕реНрдЯреНрд░рд┐рдВрдЧ: рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ (рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ);
- рд╕рд░рдгреА: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╕рд░рдгреА рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд╣реИ, рдФрд░ рдмрд╛рдж рдХреЗ рддрддреНрд╡ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ;
- рдСрдмреНрдЬреЗрдХреНрдЯ: рд╕рдорд╛рди рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдкрд░ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред
- рдмрддрд╛рдУ () - рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ (рдСрдлрд╕реЗрдЯ) рд▓реМрдЯрд╛рддрд╛ рд╣реИред
- рд╕реНрдХрд┐рдк (рдЧрд┐рдирддреА) - рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЧрдгрдирд╛ рджреНрд╡рд╛рд░рд╛ рдЖрдЧреЗ рдмрдврд╝реЗрдВ (рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝реЗрдВ)ред
- рддрд▓рд╛рд╢ (рд╕реНрдерд┐рддрд┐) - рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдлрд╕реЗрдЯ рдкрд░ рдЬрд╛рдПрдВред
- рддрд▓рд╛рд╢ (рд╕реНрдерд┐рддрд┐, рдХреЙрд▓рдмреИрдХ) - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдлрд╝рд╕реЗрдЯ рдкрд░ рдЬрд╛рдПрдВ, рдХреЙрд▓рдмреИрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (), рдлрд┐рд░ рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдкрд░ рд▓реМрдЯреЗрдВред
- рдХрд░рдВрдЯ - рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЬреЗрдкреАрд╕рд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛:
- рдирдпрд╛ jParser (рдбреЗрдЯрд╛, рд╕рдВрд░рдЪрдирд╛)
- рдбреЗрдЯрд╛ jDataView рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ ред рдЖрдк рдмрд╛рдЗрдЯреНрд╕ (рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдПрдХ ArrayBuffer рдпрд╛ Node.js рдмрдлрд░ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ jDataView рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
- рд╕рдВрд░рдЪрдирд╛ - рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБред
рдЙрджрд╛рд╣рд░рдг
C рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛рдЖрдк
рд╕реА-рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝реАрд▓реНрдб рдбреЗрдЯрд╛ рдирд╛рдо рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдорд╛рди рдкреНрд░рдХрд╛рд░ рд╣реИрдВред
var parser = new jParser(file, { header: { fileId: 'int32', recordIndex: 'int32', hash: ['array', 'uint32', 4], fileName: ['string', 256], } }); parser.parse('header');
рд╕рдВрджрд░реНрднрд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдЕрдиреНрдп рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реНрд╡ 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 рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп рдХрд┐рддрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред
рдЕрдирдкреИрдХ рдЯрд╛рд░ ред рдпрд╣ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред
- tar.html jParser рд╕рдВрд░рдЪрдирд╛ рд╣реИред
Warcraft рдореЙрдбрд▓ рд╢рд╛рд╡рд░ рдХреА рджреБрдирд┐рдпрд╛ ред рддреАрди-рдЖрдпрд╛рдореА рдореЙрдбрд▓ рдХреЗ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП jParser рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebGLред
- m2.js jParser рд╕рдВрд░рдЪрдирд╛ рд╣реИред
- model.json рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред
рдбрд┐рдпрд╛рдмреНрд▓реЛ 3 рдЖрдВрддрд░рд┐рдХ рдлрд╝рд╛рдЗрд▓реЗрдВ- рдХрдиреНрд╡рд░реНрдЯ.рдХреЙрдлреА jParser рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдлреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИред
- рд╕рдВрд╕рд╛рдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг: