exiftool_vendored 12.62.0 → 12.64.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +50 -1
- data/bin/MANIFEST +4 -0
- data/bin/META.json +4 -1
- data/bin/META.yml +4 -1
- data/bin/Makefile.PL +7 -1
- data/bin/README +50 -46
- data/bin/config_files/guano.config +161 -0
- data/bin/exiftool +88 -62
- data/bin/lib/Image/ExifTool/7Z.pm +793 -0
- data/bin/lib/Image/ExifTool/Apple.pm +6 -3
- data/bin/lib/Image/ExifTool/Canon.pm +1 -0
- data/bin/lib/Image/ExifTool/CanonRaw.pm +4 -4
- data/bin/lib/Image/ExifTool/CanonVRD.pm +4 -1
- data/bin/lib/Image/ExifTool/Exif.pm +31 -14
- data/bin/lib/Image/ExifTool/FujiFilm.pm +3 -3
- data/bin/lib/Image/ExifTool/GPS.pm +5 -2
- data/bin/lib/Image/ExifTool/Geotag.pm +4 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +226 -28
- data/bin/lib/Image/ExifTool/Lang/fr.pm +1467 -202
- data/bin/lib/Image/ExifTool/MPF.pm +2 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +16 -1
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +419 -5
- data/bin/lib/Image/ExifTool/NikonCustom.pm +13 -3
- data/bin/lib/Image/ExifTool/PDF.pm +9 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +8 -1
- data/bin/lib/Image/ExifTool/PNG.pm +6 -6
- data/bin/lib/Image/ExifTool/PhaseOne.pm +5 -5
- data/bin/lib/Image/ExifTool/QuickTime.pm +74 -21
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +20 -19
- data/bin/lib/Image/ExifTool/README +2 -2
- data/bin/lib/Image/ExifTool/RIFF.pm +11 -9
- data/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +4 -4
- data/bin/lib/Image/ExifTool/Sony.pm +103 -8
- data/bin/lib/Image/ExifTool/TagLookup.pm +4738 -4630
- data/bin/lib/Image/ExifTool/TagNames.pod +249 -5
- data/bin/lib/Image/ExifTool/Validate.pm +17 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +9 -7
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +21 -9
- data/bin/lib/Image/ExifTool/WriteXMP.pl +2 -2
- data/bin/lib/Image/ExifTool/Writer.pl +28 -10
- data/bin/lib/Image/ExifTool/XMP.pm +14 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +32 -0
- data/bin/lib/Image/ExifTool/XMPStruct.pl +96 -28
- data/bin/lib/Image/ExifTool/ZIP.pm +5 -5
- data/bin/lib/Image/ExifTool.pm +67 -39
- data/bin/lib/Image/ExifTool.pod +83 -52
- data/bin/perl-Image-ExifTool.spec +44 -44
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -2
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
16
16
|
use Image::ExifTool::Exif;
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.15';
|
19
19
|
|
20
20
|
sub ProcessMPImageList($$$);
|
21
21
|
|
@@ -131,6 +131,7 @@ sub ProcessMPImageList($$$);
|
|
131
131
|
0x020002 => 'Multi-frame Disparity',
|
132
132
|
0x020003 => 'Multi-angle',
|
133
133
|
0x030000 => 'Baseline MP Primary Image',
|
134
|
+
0x040000 => 'Original Preservation Image', # (Exif 3.0)
|
134
135
|
},
|
135
136
|
},
|
136
137
|
4 => {
|
@@ -15,7 +15,7 @@ use strict;
|
|
15
15
|
use vars qw($VERSION);
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.15';
|
19
19
|
|
20
20
|
sub HandleStruct($$;$$$$);
|
21
21
|
|
@@ -816,6 +816,21 @@ my %uidInfo = (
|
|
816
816
|
PRODUCTION_COPYRIGHT => 'ProductionCopyright',
|
817
817
|
LICENSE => 'License',
|
818
818
|
TERMS_OF_USE => 'TermsOfUse',
|
819
|
+
# (the following are untested)
|
820
|
+
'spherical-video' => { #https://github.com/google/spatial-media/blob/master/docs/spherical-video-rfc.md
|
821
|
+
Name => 'SphericalVideoXML',
|
822
|
+
SubDirectory => {
|
823
|
+
TagTable => 'Image::ExifTool::XMP::Main',
|
824
|
+
ProcessProc => 'Image::ExifTool::XMP::ProcessGSpherical',
|
825
|
+
},
|
826
|
+
},
|
827
|
+
'SPHERICAL-VIDEO' => { #https://github.com/google/spatial-media/blob/master/docs/spherical-video-rfc.md
|
828
|
+
Name => 'SphericalVideoXML',
|
829
|
+
SubDirectory => {
|
830
|
+
TagTable => 'Image::ExifTool::XMP::Main',
|
831
|
+
ProcessProc => 'Image::ExifTool::XMP::ProcessGSpherical',
|
832
|
+
},
|
833
|
+
},
|
819
834
|
);
|
820
835
|
|
821
836
|
#------------------------------------------------------------------------------
|
@@ -17,7 +17,7 @@ use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
18
18
|
use Image::ExifTool::Minolta;
|
19
19
|
|
20
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.19';
|
21
21
|
|
22
22
|
sub ProcessMRW($$;$);
|
23
23
|
sub WriteMRW($$;$);
|
@@ -489,7 +489,7 @@ sub ProcessMRW($$;$)
|
|
489
489
|
$err and $et->Error("MRW format error", $$et{TIFF_TYPE} eq 'ARW');
|
490
490
|
} else {
|
491
491
|
$err and $et->Warn("MRW format error");
|
492
|
-
$et->
|
492
|
+
$et->ImageDataHash($raf, undef, 'raw') unless $$et{A100DataOffset};
|
493
493
|
}
|
494
494
|
return $rtnVal;
|
495
495
|
}
|
@@ -60,11 +60,12 @@ package Image::ExifTool::Nikon;
|
|
60
60
|
use strict;
|
61
61
|
use vars qw($VERSION %nikonLensIDs %nikonTextEncoding);
|
62
62
|
use Image::ExifTool qw(:DataAccess :Utils);
|
63
|
+
use Image::ExifTool::NikonCustom qw(%buttonsZ9);
|
63
64
|
use Image::ExifTool::Exif;
|
64
65
|
use Image::ExifTool::GPS;
|
65
66
|
use Image::ExifTool::XMP;
|
66
67
|
|
67
|
-
$VERSION = '4.
|
68
|
+
$VERSION = '4.23';
|
68
69
|
|
69
70
|
sub LensIDConv($$$);
|
70
71
|
sub ProcessNikonAVI($$$);
|
@@ -855,11 +856,17 @@ my %banksZ9 = (
|
|
855
856
|
|
856
857
|
my %bracketIncrementZ9 = (
|
857
858
|
0 => '0.3',
|
858
|
-
|
859
|
+
1 => '0.5',
|
859
860
|
2 => '0.7',
|
860
861
|
3 => '1.0',
|
861
862
|
4 => '2.0',
|
862
863
|
5 => '3.0',
|
864
|
+
6 => '1.3',
|
865
|
+
7 => '1.5',
|
866
|
+
8 => '1.7',
|
867
|
+
9 => '2.3',
|
868
|
+
10 => '2.5',
|
869
|
+
11 => '2.7',
|
863
870
|
);
|
864
871
|
|
865
872
|
my %bracketSetZ9 = (
|
@@ -8156,7 +8163,7 @@ my %nikonFocalConversions = (
|
|
8156
8163
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
8157
8164
|
VARS => { ID_LABEL => 'Index', NIKON_OFFSETS => 0x24 },
|
8158
8165
|
DATAMEMBER => [ 0x04 ],
|
8159
|
-
IS_SUBDIR => [ 0x30, 0x58, 0x84, 0x8c ],
|
8166
|
+
IS_SUBDIR => [ 0x30, 0x58, 0x80, 0x84, 0x8c ],
|
8160
8167
|
WRITABLE => 1,
|
8161
8168
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
8162
8169
|
NOTES => 'These tags are extracted from encrypted data in images from the Z9.',
|
@@ -8208,6 +8215,15 @@ my %nikonFocalConversions = (
|
|
8208
8215
|
Start => '$val',
|
8209
8216
|
},
|
8210
8217
|
},
|
8218
|
+
0x80 => {
|
8219
|
+
Name => 'AutoCaptureOffset',
|
8220
|
+
Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "04.00"',
|
8221
|
+
Format => 'int32u',
|
8222
|
+
SubDirectory => {
|
8223
|
+
TagTable => 'Image::ExifTool::Nikon::AutoCaptureInfo',
|
8224
|
+
Start => '$val',
|
8225
|
+
},
|
8226
|
+
},
|
8211
8227
|
0x84 => {
|
8212
8228
|
Name => 'OrientOffset',
|
8213
8229
|
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
@@ -8427,16 +8443,119 @@ my %nikonFocalConversions = (
|
|
8427
8443
|
},
|
8428
8444
|
{
|
8429
8445
|
Name => 'MenuSettingsOffsetZ9v3',
|
8430
|
-
|
8446
|
+
Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} lt "04.00"',
|
8447
|
+
Notes => 'Firmware versions 3.0 and v3.10',
|
8431
8448
|
Format => 'int32u',
|
8432
8449
|
SubDirectory => {
|
8433
8450
|
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9v3',
|
8434
8451
|
Start => '$dirStart + $val',
|
8435
8452
|
},
|
8436
8453
|
},
|
8454
|
+
{
|
8455
|
+
Name => 'MenuSettingsOffsetZ9v3',
|
8456
|
+
Notes => 'Firmware versions 4.0 and later',
|
8457
|
+
Format => 'int32u',
|
8458
|
+
SubDirectory => {
|
8459
|
+
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9v4',
|
8460
|
+
Start => '$dirStart + $val',
|
8461
|
+
},
|
8462
|
+
},
|
8437
8463
|
],
|
8438
8464
|
);
|
8439
8465
|
|
8466
|
+
%Image::ExifTool::Nikon::AutoCaptureInfo = (
|
8467
|
+
%binaryDataAttrs,
|
8468
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
8469
|
+
1 => {
|
8470
|
+
Name => 'AutoCaptureCriteria',
|
8471
|
+
PrintConv => q[
|
8472
|
+
$_ = '';
|
8473
|
+
return $_ . Image::ExifTool::DecodeBits($val,
|
8474
|
+
{
|
8475
|
+
0 => 'Distance',
|
8476
|
+
1 => 'Motion',
|
8477
|
+
2 => 'Subject Detection',
|
8478
|
+
});
|
8479
|
+
],
|
8480
|
+
},
|
8481
|
+
# offsets 3-52 contain a bitmap of the focus points enabled when AutoArea is the AF-Area Mode. 0=> disabled, 1=> enabled. Focus points are in a grid with dimensions 25x15.
|
8482
|
+
55 => {
|
8483
|
+
Name => 'AutoCaptureRecordingTime',
|
8484
|
+
PrintConv => {
|
8485
|
+
0 => '1 Sec',
|
8486
|
+
1 => '3 Sec',
|
8487
|
+
2 => '5 Sec',
|
8488
|
+
#3 => '',
|
8489
|
+
4 => '30 Sec',
|
8490
|
+
5 => 'No Limit',
|
8491
|
+
6 => '2 Sec',
|
8492
|
+
7 => '10 Sec',
|
8493
|
+
8 => '20 Sec',
|
8494
|
+
9 => '1 Min',
|
8495
|
+
10 => '3 Min',
|
8496
|
+
11 => '5 Min',
|
8497
|
+
12 => '10 Min',
|
8498
|
+
13 => '30 Min',
|
8499
|
+
},
|
8500
|
+
},
|
8501
|
+
56 => {
|
8502
|
+
Name => 'AutoCaptureWaitTime',
|
8503
|
+
PrintConv => {
|
8504
|
+
0 => 'No Wait',
|
8505
|
+
1 => '10 Sec',
|
8506
|
+
2 => '30 Sec',
|
8507
|
+
3 => '1 Min',
|
8508
|
+
4 => '5 Min',
|
8509
|
+
5 => '10 Min',
|
8510
|
+
6 => '30 Min',
|
8511
|
+
7 => '1 Sec',
|
8512
|
+
8 => '2 Sec',
|
8513
|
+
9 => '3 Sec',
|
8514
|
+
10 => '5 Sec',
|
8515
|
+
11 => '20 Sec',
|
8516
|
+
12 => '3 Min',
|
8517
|
+
},
|
8518
|
+
},
|
8519
|
+
74 => {
|
8520
|
+
Name => 'AutoCaptureDistanceFar',
|
8521
|
+
PrintConv => 'sprintf("%.1f m", $val/10)',
|
8522
|
+
},
|
8523
|
+
78 => {
|
8524
|
+
Name => 'AutoCaptureDistanceNear',
|
8525
|
+
PrintConv => 'sprintf("%.1f m", $val/10)',
|
8526
|
+
},
|
8527
|
+
95 => {
|
8528
|
+
Name => 'AutoCaptureCriteriaMotionDirection',
|
8529
|
+
PrintConv => q[
|
8530
|
+
return 'All' if $val eq 255;
|
8531
|
+
$_ = '';
|
8532
|
+
return $_ . Image::ExifTool::DecodeBits($val,
|
8533
|
+
{
|
8534
|
+
0 => 'Top Left',
|
8535
|
+
1 => 'Top Right',
|
8536
|
+
2 => 'Bottom Left',
|
8537
|
+
3 => 'Bottom Right',
|
8538
|
+
4 => 'Left',
|
8539
|
+
5 => 'Right',
|
8540
|
+
6 => 'Top Center',
|
8541
|
+
7 => 'Bottom Center',
|
8542
|
+
});
|
8543
|
+
],
|
8544
|
+
},
|
8545
|
+
99 => 'AutoCaptureCriteriaMotionSpeed', #1-5
|
8546
|
+
100 => 'AutoCaptureCriteriaMotionSize', #1-5
|
8547
|
+
105 => 'AutoCaptureCriteriaSubjectSize', #1-5
|
8548
|
+
106 => {
|
8549
|
+
Name => 'AutoCaptureCriteriaSubjectType',
|
8550
|
+
PrintConv => {
|
8551
|
+
0 => 'Auto (all)',
|
8552
|
+
1 => 'People',
|
8553
|
+
2 => 'Animals',
|
8554
|
+
3 => 'Vehicle'
|
8555
|
+
},
|
8556
|
+
},
|
8557
|
+
);
|
8558
|
+
|
8440
8559
|
%Image::ExifTool::Nikon::OrientationInfo = (
|
8441
8560
|
%binaryDataAttrs,
|
8442
8561
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -9146,6 +9265,301 @@ my %nikonFocalConversions = (
|
|
9146
9265
|
#1892 DispButton CSf2
|
9147
9266
|
#1936 FocusPointDisplayOption3DTrackingColor CSa11-d 0=> 'White', 1= => 'Red'
|
9148
9267
|
);
|
9268
|
+
%Image::ExifTool::Nikon::MenuSettingsZ9v4 = (
|
9269
|
+
%binaryDataAttrs,
|
9270
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
9271
|
+
DATAMEMBER => [ 154, 204, 208, 248, 444, 554, 596 ],
|
9272
|
+
IS_SUBDIR => [ 847 ],
|
9273
|
+
NOTES => 'These tags are used by the Z9 firmware 3.00.',
|
9274
|
+
72 => {
|
9275
|
+
Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
|
9276
|
+
PrintConv => \%highFrameRateZ9,
|
9277
|
+
},
|
9278
|
+
154 => {
|
9279
|
+
Name => 'MultipleExposureMode',
|
9280
|
+
RawConv => '$$self{MultipleExposureMode} = $val',
|
9281
|
+
PrintConv => \%multipleExposureModeZ9,
|
9282
|
+
},
|
9283
|
+
156 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
|
9284
|
+
204 => {
|
9285
|
+
Name => 'Intervals',
|
9286
|
+
Format => 'int32u',
|
9287
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
9288
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
9289
|
+
},
|
9290
|
+
208 => {
|
9291
|
+
Name => 'ShotsPerInterval',
|
9292
|
+
Format => 'int32u',
|
9293
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
9294
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
9295
|
+
},
|
9296
|
+
248 => {
|
9297
|
+
Name => 'FocusShiftNumberShots', #1-300
|
9298
|
+
RawConv => '$$self{FocusShiftNumberShots} = $val',
|
9299
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
9300
|
+
},
|
9301
|
+
252 => {
|
9302
|
+
Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
|
9303
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
9304
|
+
},
|
9305
|
+
256 => {
|
9306
|
+
Name => 'FocusShiftInterval',
|
9307
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
9308
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
9309
|
+
},
|
9310
|
+
260 => {
|
9311
|
+
Name => 'FocusShiftExposureLock',
|
9312
|
+
Unknown => 1,
|
9313
|
+
PrintConv => \%offOn,
|
9314
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
9315
|
+
},
|
9316
|
+
290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
|
9317
|
+
292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
|
9318
|
+
328 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
|
9319
|
+
342 => { Name => 'AutoISO', PrintConv => \%offOn },
|
9320
|
+
344 => {
|
9321
|
+
Name => 'ISOAutoHiLimit',
|
9322
|
+
Format => 'int16u',
|
9323
|
+
Unknown => 1,
|
9324
|
+
ValueConv => '($val-104)/8',
|
9325
|
+
ValueConvInv => '8 * ($val + 104)',
|
9326
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
9327
|
+
},
|
9328
|
+
346 => {
|
9329
|
+
Name => 'ISOAutoFlashLimit',
|
9330
|
+
Format => 'int16u',
|
9331
|
+
Unknown => 1,
|
9332
|
+
ValueConv => '($val-104)/8',
|
9333
|
+
ValueConvInv => '8 * ($val + 104)',
|
9334
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
9335
|
+
},
|
9336
|
+
354 => {
|
9337
|
+
Name => 'ISOAutoShutterTime', # shutter speed is 2 ** (-$val/24)
|
9338
|
+
ValueConv => '$val / 8',
|
9339
|
+
Format => 'int16s',
|
9340
|
+
PrintConv => \%iSOAutoShutterTimeZ9,
|
9341
|
+
},
|
9342
|
+
436 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
|
9343
|
+
438 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, # value can be set from both the Photo Shoot Menu and the Video Shooting Menu
|
9344
|
+
440 => { Name => 'FlickerReductionShooting',PrintConv => \%offOn },
|
9345
|
+
444 => {
|
9346
|
+
Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
9347
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
9348
|
+
PrintConv => \%flashControlModeZ7,
|
9349
|
+
},
|
9350
|
+
446 => {
|
9351
|
+
Name => 'FlashMasterCompensation',
|
9352
|
+
Format => 'int8s',
|
9353
|
+
Unknown => 1,
|
9354
|
+
ValueConv => '$val/6',
|
9355
|
+
ValueConvInv => '6 * $val',
|
9356
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
9357
|
+
PrintConvInv => '$val',
|
9358
|
+
},
|
9359
|
+
450 => {
|
9360
|
+
Name => 'FlashGNDistance',
|
9361
|
+
Condition => '$$self{FlashControlMode} == 2',
|
9362
|
+
Unknown => 1,
|
9363
|
+
ValueConv => '$val + 3',
|
9364
|
+
PrintConv => \%flashGNDistance,
|
9365
|
+
},
|
9366
|
+
454 => {
|
9367
|
+
Name => 'FlashOutput', # range[0,24] with 0=>Full; 1=>50%; then decreasing flash power in 1/3 stops to 0.39% (1/256 full power). also found in FlashInfoUnknown at offset 0x0a (with different mappings)
|
9368
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
9369
|
+
Unknown => 1,
|
9370
|
+
ValueConv => '2 ** (-$val/3)',
|
9371
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
9372
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
9373
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
9374
|
+
},
|
9375
|
+
#462 flash wireless control 0=> 'Off' 1=> 'Optical AWL'
|
9376
|
+
#464 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
|
9377
|
+
#476 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
|
9378
|
+
548 => { Name => 'AFAreaMode', PrintConv => \%aFAreaModeZ9},
|
9379
|
+
550 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
|
9380
|
+
554 => {
|
9381
|
+
Name => 'BracketSet',
|
9382
|
+
RawConv => '$$self{BracketSet} = $val',
|
9383
|
+
PrintConv => \%bracketSetZ9,
|
9384
|
+
},
|
9385
|
+
556 => {
|
9386
|
+
Name => 'BracketProgram',
|
9387
|
+
Condition => '$$self{BracketSet} < 3',
|
9388
|
+
Notes => 'AE and/or Flash Bracketing',
|
9389
|
+
PrintConv => \%bracketProgramZ9,
|
9390
|
+
},
|
9391
|
+
558 => {
|
9392
|
+
Name => 'BracketIncrement',
|
9393
|
+
Condition => '$$self{BracketSet} < 3',
|
9394
|
+
Notes => 'AE and/or Flash Bracketing',
|
9395
|
+
PrintConv => \%bracketIncrementZ9,
|
9396
|
+
},
|
9397
|
+
576 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
|
9398
|
+
586 => { Name => 'Slot2JpgSize', PrintConv => { 0 => 'Large (8256x5504)', 1 => 'Medium (6192x4128)', 2 => 'Small (4128x2752)' }, Unknown => 1},
|
9399
|
+
592 => { Name => 'DXCropAlert', PrintConv => \%offOn },
|
9400
|
+
594 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
|
9401
|
+
596 => {
|
9402
|
+
Name => 'DynamicAFAreaSize',
|
9403
|
+
Condition => '$$self{AFAraMode} = 2',
|
9404
|
+
RawConv => '$$self{DynamicAFAreaSize} = $val',
|
9405
|
+
PrintConv => \%dynamicAfAreaModesZ9,
|
9406
|
+
},
|
9407
|
+
636 => { Name => 'HighFrequencyFlickerReductionShooting', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
|
9408
|
+
646 => {
|
9409
|
+
Name => 'MovieImageArea',
|
9410
|
+
Unknown => 1,
|
9411
|
+
Mask => 0x01, # without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
|
9412
|
+
PrintConv => \%imageAreaZ9b,
|
9413
|
+
},
|
9414
|
+
656 => { Name => 'MovieType', PrintConv => \%movieTypeZ9, Unknown => 1 },
|
9415
|
+
658 => {
|
9416
|
+
Name => 'MovieISOAutoHiLimit',
|
9417
|
+
Format => 'int16u',
|
9418
|
+
Unknown => 1,
|
9419
|
+
ValueConv => '($val-104)/8',
|
9420
|
+
ValueConvInv => '8 * ($val + 104)',
|
9421
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
9422
|
+
},
|
9423
|
+
660 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1 },
|
9424
|
+
662 => {
|
9425
|
+
Name => 'MovieISOAutoManualMode',
|
9426
|
+
Format => 'int16u',
|
9427
|
+
Unknown => 1,
|
9428
|
+
ValueConv => '($val-104)/8',
|
9429
|
+
ValueConvInv => '8 * ($val + 104)',
|
9430
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
9431
|
+
},
|
9432
|
+
736 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1 },
|
9433
|
+
738 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
|
9434
|
+
744 => { Name => 'MovieFlickerReduction', PrintConv => \%movieFlickerReductionZ9 },
|
9435
|
+
746 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, Unknown => 1 },
|
9436
|
+
748 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1 },
|
9437
|
+
750 => { Name => 'MovieAFAreaMode', PrintConv => \%aFAreaModeZ9 },
|
9438
|
+
752 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1 },
|
9439
|
+
756 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
|
9440
|
+
758 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Manual' }, Unknown => 1 },
|
9441
|
+
760 => { Name => 'MicrophoneSensitivity', Unknown => 1 }, # 1-20
|
9442
|
+
762 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
|
9443
|
+
764 => { Name => 'MicrophoneFrequencyResponse',PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
|
9444
|
+
766 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
|
9445
|
+
788 => { Name => 'MovieToneMap', PrintConv => \%movieToneMapZ9, Unknown => 1 },
|
9446
|
+
794 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
|
9447
|
+
796 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
|
9448
|
+
802 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
|
9449
|
+
803 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
|
9450
|
+
804 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1 },
|
9451
|
+
812 => { Name => 'MovieHighResZoom', PrintConv => \%offOn, Unknown => 1 },
|
9452
|
+
847 => {
|
9453
|
+
Name => 'CustomSettingsZ9',
|
9454
|
+
Format => 'undef[608]',
|
9455
|
+
SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ9' },
|
9456
|
+
},
|
9457
|
+
1474 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
|
9458
|
+
1476 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
|
9459
|
+
1482 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5. Added with firmware 3.0: Lo1, Lo2, Hi1, Hi2
|
9460
|
+
1504 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
|
9461
|
+
1532 => { Name => 'NonCPULens1FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1}, #should probably hide altogther if $val is 0
|
9462
|
+
1536 => { Name => 'NonCPULens2FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9463
|
+
1540 => { Name => 'NonCPULens3FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9464
|
+
1544 => { Name => 'NonCPULens4FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9465
|
+
1548 => { Name => 'NonCPULens5FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9466
|
+
1552 => { Name => 'NonCPULens6FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9467
|
+
1556 => { Name => 'NonCPULens7FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9468
|
+
1560 => { Name => 'NonCPULens8FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9469
|
+
1564 => { Name => 'NonCPULens9FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9470
|
+
1568 => { Name => 'NonCPULens10FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9471
|
+
1572 => { Name => 'NonCPULens11FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9472
|
+
1576 => { Name => 'NonCPULens21FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9473
|
+
1580 => { Name => 'NonCPULens13FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9474
|
+
1584 => { Name => 'NonCPULens14FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9475
|
+
1588 => { Name => 'NonCPULens15FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9476
|
+
1592 => { Name => 'NonCPULens16FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9477
|
+
1596 => { Name => 'NonCPULens17FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9478
|
+
1600 => { Name => 'NonCPULens18FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9479
|
+
1604 => { Name => 'NonCPULens19FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9480
|
+
1608 => { Name => 'NonCPULens20FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
9481
|
+
1612 => { Name => 'NonCPULens1MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9482
|
+
1616 => { Name => 'NonCPULens2MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9483
|
+
1620 => { Name => 'NonCPULens3MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9484
|
+
1624 => { Name => 'NonCPULens4MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9485
|
+
1628 => { Name => 'NonCPULens5MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9486
|
+
1632 => { Name => 'NonCPULens6MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9487
|
+
1636 => { Name => 'NonCPULens7MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9488
|
+
1640 => { Name => 'NonCPULens8MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9489
|
+
1644 => { Name => 'NonCPULens9MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9490
|
+
1648 => { Name => 'NonCPULens10MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9491
|
+
1652 => { Name => 'NonCPULens11MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9492
|
+
1656 => { Name => 'NonCPULens12MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9493
|
+
1660 => { Name => 'NonCPULens13MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9494
|
+
1664 => { Name => 'NonCPULens14MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9495
|
+
1668 => { Name => 'NonCPULens15MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9496
|
+
1672 => { Name => 'NonCPULens16MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9497
|
+
1676 => { Name => 'NonCPULens17MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9498
|
+
1680 => { Name => 'NonCPULens18MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9499
|
+
1684 => { Name => 'NonCPULens19MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9500
|
+
1688 => { Name => 'NonCPULens20MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
9501
|
+
1704 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
|
9502
|
+
1717 => { Name => 'SetClockFromLocationData', PrintConv => \%offOn, Unknown => 1 },
|
9503
|
+
1724 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
|
9504
|
+
1725 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
|
9505
|
+
1760 => { Name => 'EnergySavingMode', PrintConv => \%offOn, Unknown => 1 },
|
9506
|
+
1784 => { Name => 'RecordLocationData', PrintConv => \%offOn, Unknown => 1 },
|
9507
|
+
1788 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
|
9508
|
+
1797 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
|
9509
|
+
1862 => {
|
9510
|
+
Name => 'AutoCapturePreset',
|
9511
|
+
PrintConv => {
|
9512
|
+
0 => '1',
|
9513
|
+
1 => '2',
|
9514
|
+
2 => '3',
|
9515
|
+
3 => '4',
|
9516
|
+
4 => '5',
|
9517
|
+
},
|
9518
|
+
},
|
9519
|
+
1864 => {
|
9520
|
+
Name => 'FocusShiftAutoReset',
|
9521
|
+
Unknown => 1,
|
9522
|
+
PrintConv => \%offOn,
|
9523
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
9524
|
+
},
|
9525
|
+
1922 => { #CSd4-a
|
9526
|
+
Name => 'PreReleaseBurstLength',
|
9527
|
+
PrintConv => {
|
9528
|
+
0 => 'None',
|
9529
|
+
1 => '0.3 Sec',
|
9530
|
+
2 => '0.5 Sec',
|
9531
|
+
3 => '1 Sec',
|
9532
|
+
},
|
9533
|
+
},
|
9534
|
+
1924 => { #CSd4-b
|
9535
|
+
Name => 'PostReleaseBurstLength',
|
9536
|
+
PrintConv => {
|
9537
|
+
0 => '1 Sec',
|
9538
|
+
1 => '2 Sec',
|
9539
|
+
2 => '3 Sec',
|
9540
|
+
3 => 'Max',
|
9541
|
+
},
|
9542
|
+
},
|
9543
|
+
1938 => { Name => 'VerticalISOButton', %buttonsZ9}, #CSf2
|
9544
|
+
1940 => { Name => 'ExposureCompensationButton', %buttonsZ9}, #CSf2
|
9545
|
+
1942 => { Name => 'ISOButton', %buttonsZ9}, #CSf2
|
9546
|
+
2002 => { Name => 'ViewModeShowEffectsOfSettings', PrintConv => { 0=>'Always', 1=> 'Only When Flash Not Used'}, Unknown => 1 }, #CSd9-a
|
9547
|
+
2004 => { Name => 'DispButton', %buttonsZ9}, #CSf2
|
9548
|
+
2048 => { #CSd6
|
9549
|
+
Name => 'ExposureDelay',
|
9550
|
+
Format => 'fixed32u',
|
9551
|
+
PrintConv => '$val ? sprintf("%.1f sec",$val/1000) : "Off"',
|
9552
|
+
},
|
9553
|
+
2056 => { Name => 'PlaybackButton', %buttonsZ9}, #CSf2
|
9554
|
+
2058 => { Name => 'WBButton', %buttonsZ9}, #CSf2
|
9555
|
+
2060 => { Name => 'BracketButton', %buttonsZ9}, #CSf2
|
9556
|
+
2062 => { Name => 'FlashModeButton', %buttonsZ9}, #CSf2
|
9557
|
+
2064 => { Name => 'LensFunc1ButtonPlaybackMode', %buttonsZ9}, #CSf2
|
9558
|
+
2066 => { Name => 'LensFunc2ButtonPlaybackMode', %buttonsZ9}, #CSf2
|
9559
|
+
2068 => { Name => 'PlaybackButtonPlaybackMode', %buttonsZ9}, #CSf2
|
9560
|
+
2070 => { Name => 'BracketButtonPlaybackMode', %buttonsZ9}, #CSf2
|
9561
|
+
2072 => { Name => 'FlashModeButtonPlaybackMode', %buttonsZ9}, #CSf2
|
9562
|
+
);
|
9149
9563
|
|
9150
9564
|
# Flash information (ref JD)
|
9151
9565
|
%Image::ExifTool::Nikon::FlashInfo0100 = (
|
@@ -12070,7 +12484,7 @@ sub PrepareNikonOffsets($$$$$)
|
|
12070
12484
|
my $pos = $sorted[$i][0];
|
12071
12485
|
my $len = $sorted[$i+1][1] - $sorted[$i][1];
|
12072
12486
|
# set DirLen in SubDirectory entry
|
12073
|
-
my $tagInfo = $$tagTablePtr{$pos};
|
12487
|
+
my $tagInfo = $et->GetTagInfo($tagTablePtr, $pos) if $$tagTablePtr{$pos};
|
12074
12488
|
my $subdir;
|
12075
12489
|
$$subdir{DirLen} = $len if ref $tagInfo eq 'HASH' and defined($subdir=$$tagInfo{SubDirectory});
|
12076
12490
|
if ($decryptMode) {
|
@@ -13,11 +13,14 @@
|
|
13
13
|
package Image::ExifTool::NikonCustom;
|
14
14
|
|
15
15
|
use strict;
|
16
|
-
use vars qw($VERSION);
|
16
|
+
use vars qw($VERSION @ISA @EXPORT_OK %buttonsZ9);
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.23';
|
19
19
|
|
20
|
-
|
20
|
+
@ISA = qw(Exporter);
|
21
|
+
@EXPORT_OK = qw(%buttonsZ9);
|
22
|
+
|
23
|
+
%buttonsZ9= (
|
21
24
|
SeparateTable => 'ButtonsZ9',
|
22
25
|
PrintConv => {
|
23
26
|
0 => 'None',
|
@@ -41,9 +44,11 @@ my %buttonsZ9= (
|
|
41
44
|
24 => 'Protect',
|
42
45
|
25 => 'Zoom',
|
43
46
|
26 => 'Focus Peaking',
|
47
|
+
27 => 'Flash Mode/Compensation',
|
44
48
|
28 => 'Image Area',
|
45
49
|
30 => 'Non-CPU Lens',
|
46
50
|
31 => 'Active-D Lighting',
|
51
|
+
32 => 'Exposure Delay Mode',
|
47
52
|
33 => '1 Stop Speed/Aperture',
|
48
53
|
34 => 'White Balance',
|
49
54
|
35 => 'Metering',
|
@@ -55,10 +60,13 @@ my %buttonsZ9= (
|
|
55
60
|
41 => 'Focus Mode/AF AreaMode',
|
56
61
|
42 => 'Select Center Focus Point',
|
57
62
|
44 => 'Record Movie',
|
63
|
+
45 => 'Thumbnail On/Off',
|
64
|
+
46 => 'View Histograms',
|
58
65
|
47 => 'Choose Folder',
|
59
66
|
48 => 'Power Aperture (Open)',
|
60
67
|
49 => 'Power Aperture (Close)',
|
61
68
|
52 => 'Microphone Sensitivity',
|
69
|
+
53 => 'Release Mode',
|
62
70
|
57 => 'Preset Focus Point',
|
63
71
|
58 => 'AE/AWB Lock (hold)',
|
64
72
|
59 => 'AF-AreaMode',
|
@@ -95,6 +103,8 @@ my %buttonsZ9= (
|
|
95
103
|
109 => 'DISP - Cycle Information Display (shooting)', # Shooting Mode
|
96
104
|
110 => 'DISP - Cycle Information Display (playback)', # Playback mode
|
97
105
|
111 => 'Resume Shooting',
|
106
|
+
112 => 'Switch Eyes',
|
107
|
+
115 => 'Delete',
|
98
108
|
},
|
99
109
|
);
|
100
110
|
my %dialsZ9 = (
|
@@ -109,7 +109,15 @@ my %supportedFilter = (
|
|
109
109
|
Title => { },
|
110
110
|
Author => { Groups => { 2 => 'Author' } },
|
111
111
|
Subject => { },
|
112
|
-
Keywords => {
|
112
|
+
Keywords => {
|
113
|
+
List => 'string', # this is a string list
|
114
|
+
Notes => q{
|
115
|
+
stored as a string but treated as a comma-separated list of items when
|
116
|
+
reading if the string contains a comma, otherwise a space-separated list of
|
117
|
+
items. Written as a comma-separated list. The list behaviour may be
|
118
|
+
defeated by setting the API NoPDFList option
|
119
|
+
},
|
120
|
+
},
|
113
121
|
Creator => { },
|
114
122
|
Producer => { },
|
115
123
|
CreationDate => {
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
21
21
|
use Image::ExifTool::XMP;
|
22
22
|
use Image::ExifTool::GPS;
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.11';
|
25
25
|
|
26
26
|
sub ExtractObject($$;$);
|
27
27
|
sub Get24u($$);
|
@@ -288,6 +288,12 @@ sub ExtractObject($$;$)
|
|
288
288
|
my $obj = ExtractObject($et, $plistInfo, $tag);
|
289
289
|
next if not defined $obj;
|
290
290
|
unless ($tagTablePtr) {
|
291
|
+
# make sure this is a valid structure field name
|
292
|
+
if (not defined $key or $key !~ /^[-_a-zA-Z0-9]+$/) {
|
293
|
+
$key = "Tag$i"; # (generate fake tag name if it had illegal characters)
|
294
|
+
} elsif ($key !~ /^[_a-zA-Z]/) {
|
295
|
+
$key = "_$key"; # (must begin with alpha or underline)
|
296
|
+
}
|
291
297
|
$$val{$key} = $obj if defined $obj;
|
292
298
|
next;
|
293
299
|
}
|
@@ -298,6 +304,7 @@ sub ExtractObject($$;$)
|
|
298
304
|
my $name = $tag;
|
299
305
|
$name =~ s/([^A-Za-z])([a-z])/$1\u$2/g; # capitalize words
|
300
306
|
$name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters
|
307
|
+
$name = "Tag$name" if length($name) < 2 or $name =~ /^[-0-9]/;
|
301
308
|
$tagInfo = { Name => ucfirst($name), List => 1 };
|
302
309
|
if ($$plistInfo{DateFormat}) {
|
303
310
|
$$tagInfo{Groups}{2} = 'Time';
|