Package tv.porst.swfretools.parser.structures

Source Code of tv.porst.swfretools.parser.structures.AS3DataParser

package tv.porst.swfretools.parser.structures;

import static tv.porst.swfretools.parser.SWFParserHelpers.parseUINT16;

import java.util.ArrayList;
import java.util.List;

import tv.porst.splib.binaryparser.UINT16;
import tv.porst.swfretools.parser.SWFBinaryParser;
import tv.porst.swfretools.parser.SWFParserException;

public class AS3DataParser {

  public static AS3Data parse(final SWFBinaryParser parser, final String fieldName) throws SWFParserException {

    final UINT16 minorVersion = parseUINT16(parser, 0x00006, fieldName + "::minor_version");
    final UINT16 majorVersion = parseUINT16(parser, 0x00006, fieldName + "::major_version");
    final ConstantPool constantPool = ConstantPoolParser.parse(parser, fieldName + "::constant_pool");

    final EncodedU30 methodCount = EncodedU30Parser.parse(parser, fieldName + "::method_count");

    final List<MethodInfo> methodInfos = new ArrayList<MethodInfo>();

    for (int i=0;i<methodCount.value();i++) {
      methodInfos.add(MethodInfoParser.parse(parser, String.format(fieldName + "::method_info[%d]", i)));
    }

    final EncodedU30 metaDataCount = EncodedU30Parser.parse(parser, fieldName + "::metadata_count");

    final List<MetaData> metaData = new ArrayList<MetaData>();

    for (int i=0;i<metaDataCount.value();i++) {
      metaData.add(MetaDataParser.parse(parser, String.format(fieldName + "::metadata[%d]", i)));
    }

    final EncodedU30 classCount = EncodedU30Parser.parse(parser, fieldName + "::class_count");

    final List<InstanceInfo> instances = new ArrayList<InstanceInfo>();

    for (int i=0;i<classCount.value();i++) {
      instances.add(InstanceInfoParser.parse(parser, String.format(fieldName + "::instances[%d]", i)));
    }

    final List<ClassInfo> classes = new ArrayList<ClassInfo>();

    for (int i=0;i<classCount.value();i++) {
      classes.add(ClassInfoParser.parse(parser, String.format(fieldName + "::class[%d]", i)));
    }

    final EncodedU30 scriptCount = EncodedU30Parser.parse(parser, fieldName + "::script_count");

    final List<ScriptInfo> scripts = new ArrayList<ScriptInfo>();

    for (int i=0;i<scriptCount.value();i++) {
      scripts.add(ScriptInfoParser.parse(parser, String.format(fieldName + "::script[%d]", i)));
    }

    final EncodedU30 methodBodyCount = EncodedU30Parser.parse(parser, fieldName + "::method_body_count");

    final List<MethodBody> methodBodies = new ArrayList<MethodBody>();

    for (int i=0;i<methodBodyCount.value();i++) {
      methodBodies.add(MethodBodyParser.parse(parser, String.format(fieldName + "::script[%d]", i)));
    }

    return new AS3Data(minorVersion, majorVersion, constantPool, methodCount, new MethodInfoList(methodInfos),
        metaDataCount, new MetaDataList(metaData), classCount, new InstanceInfoList(instances),
        new ClassInfoList(classes), scriptCount, new ScriptInfoList(scripts), methodCount, new MethodBodyList(methodBodies));
  }

}
TOP

Related Classes of tv.porst.swfretools.parser.structures.AS3DataParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.