parse static method

Property<Object> parse(
  1. Parser parser
)

Implementation

static Property<Object> parse(Parser parser) {
  final name = parser.getString('name');
  final type = parser.getPropertyType('type', defaults: PropertyType.string);

  switch (type) {
    case PropertyType.object:
      return ObjectProperty(
        name: name,
        value: parser.getInt('value', defaults: 0),
      );

    case PropertyType.color:
      return ColorProperty(
        name: name,
        value: parser.getColor('value', defaults: const Color(0x00000000)),
        hexValue: parser.getString('value', defaults: '#00000000'),
      );

    case PropertyType.bool:
      return BoolProperty(
        name: name,
        value: parser.getBool('value', defaults: false),
      );

    case PropertyType.float:
      return FloatProperty(
        name: name,
        value: parser.getDouble('value', defaults: 0),
      );

    case PropertyType.int:
      return IntProperty(
        name: name,
        value: parser.getInt('value', defaults: 0),
      );

    case PropertyType.file:
      return FileProperty(
        name: name,
        value: parser.getString('value', defaults: '.'),
      );

    case PropertyType.string:
      final value = parser.formatSpecificParsing((json) {
        return json.getString('value', defaults: '');
      }, (xml) {
        final attrString = parser.getStringOrNull('value');
        if (attrString != null) {
          return attrString;
        } else {
          // In tmx files, multi-line text property values can be stored
          // inside the <property> node itself instead of in the 'value'
          // attribute
          return xml.element.innerText;
        }
      });

      return StringProperty(
        name: name,
        value: value,
      );
  }
}