import 'package:aves/utils/xmp_utils.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_namespaces.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_structs.dart'; import 'package:flutter/widgets.dart'; // cf www.metadataworkinggroup.org/pdf/mwg_guidance.pdf (down, as of 2021/02/15) class XmpMgwRegionsNamespace extends XmpNamespace { late final dimensionsPattern = RegExp(nsPrefix + r'Regions/mwg-rs:AppliedToDimensions/(.*)'); late final regionListPattern = RegExp(nsPrefix + r'Regions/mwg-rs:RegionList\[(\d+)\]/(.*)'); final dimensions = {}; final regionList = >{}; XmpMgwRegionsNamespace(String nsPrefix, Map rawProps) : super(Namespaces.mwgrs, nsPrefix, rawProps); @override bool extractData(XmpProp prop) { final hasStructs = extractStruct(prop, dimensionsPattern, dimensions); final hasIndexedStructs = extractIndexedStruct(prop, regionListPattern, regionList); return hasStructs || hasIndexedStructs; } @override List buildFromExtractedData() => [ if (dimensions.isNotEmpty) XmpStructCard( title: 'Applied To Dimensions', struct: dimensions, ), if (regionList.isNotEmpty) XmpStructArrayCard( title: 'Region', structByIndex: regionList, ), ]; }