Package tv.porst.swfretools.parser.structures

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

package tv.porst.swfretools.parser.structures;

import static tv.porst.swfretools.parser.SWFParserHelpers.parseUINT8;
import tv.porst.splib.binaryparser.UINT8;
import tv.porst.swfretools.parser.SWFBinaryParser;
import tv.porst.swfretools.parser.SWFParserException;

public class MultinameInfoParser {

  private static IMultiname parseData(final SWFBinaryParser parser, final UINT8 kind, final String fieldName) throws SWFParserException {
    switch(kind.value()) {
    case 0x07: return QNameParser.parse(parser, fieldName);
    case 0x0D: return QNameAParser.parse(parser, fieldName);
    case 0x0F: return RTQNameParser.parse(parser, fieldName);
    case 0x10: return RTQNameAParser.parse(parser, fieldName);
    case 0x11: return RTQNameLParser.parse(parser, fieldName); // TODO: Should be null
    case 0x12: return RTQNameLAParser.parse(parser, fieldName); // TODO: Should be null
    case 0x09: return MultinameParser.parse(parser, fieldName);
    case 0x0E: return MultinameAParser.parse(parser, fieldName);
    case 0x1B: return MultinameLParser.parse(parser, fieldName);
    case 0x1C: return MultinameLAParser.parse(parser, fieldName);
    case 0x1D: return GenericVectorParser.parse(parser, fieldName);
    default: throw new IllegalStateException("Invalid multiname type");
    }
  }

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

    final UINT8 kind = parseUINT8(parser, 0x00006, fieldName + "::kind");
    final IMultiname data = parseData(parser, kind, fieldName + "::data");

    return new MultinameInfo(kind, data);
  }
}
TOP

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

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.