@@ -21,6 +21,7 @@ const RE_K = /^K(\d{2})(\d{2})(\d{2})/;
21
21
const RE_IJ = / ^ [ I J ] ( \d { 2 } ) (?: \d { 2 } \d { 2 } [ A - Z ] { 3 } ) + / ;
22
22
const RE_TASK = / ^ C ( \d { 2 } ) ( \d { 2 } ) ( \d { 2 } ) ( \d { 2 } ) ( \d { 2 } ) ( \d { 2 } ) ( \d { 2 } ) ( \d { 2 } ) ( \d { 2 } ) ( \d { 4 } ) ( [ - \d ] { 2 } ) ( .* ) / ;
23
23
const RE_TASKPOINT = / ^ C ( \d { 2 } ) ( \d { 2 } ) ( \d { 3 } ) ( [ N S ] ) ( \d { 3 } ) ( \d { 2 } ) ( \d { 3 } ) ( [ E W ] ) ( .* ) / ;
24
+ const RE_INT = / ^ \d * $ / ;
24
25
/* tslint:enable:max-line-length */
25
26
26
27
const VALID_DATA_SOURCES = [ 'F' , 'O' , 'P' ] ;
@@ -430,24 +431,26 @@ class IGCParser {
430
431
throw new Error ( `Invalid B record at line ${ this . lineNumber } : ${ line } ` ) ;
431
432
}
432
433
434
+ let extensions : IGCParser . RecordExtensions = { } ;
435
+ if ( this . fixExtensions ) {
436
+ for ( let { code, start, length } of this . fixExtensions ) {
437
+ extensions [ code ] = line . slice ( start , start + length ) ;
438
+ }
439
+ }
440
+
433
441
let time = `${ match [ 1 ] } :${ match [ 2 ] } :${ match [ 3 ] } ` ;
434
442
let timestamp = this . calcTimestamp ( time ) ;
435
443
436
- let latitude = IGCParser . parseLatitude ( match [ 4 ] , match [ 5 ] , match [ 6 ] , match [ 7 ] ) ;
437
- let longitude = IGCParser . parseLongitude ( match [ 8 ] , match [ 9 ] , match [ 10 ] , match [ 11 ] ) ;
444
+ let mmmext = ( RE_INT . test ( extensions [ 'LAD' ] ) ) ? extensions [ 'LAD' ] : '' ;
445
+ let latitude = IGCParser . parseLatitude ( match [ 4 ] , match [ 5 ] , match [ 6 ] + mmmext , match [ 7 ] ) ;
446
+ mmmext = ( RE_INT . test ( extensions [ 'LOD' ] ) ) ? extensions [ 'LOD' ] : '' ;
447
+ let longitude = IGCParser . parseLongitude ( match [ 8 ] , match [ 9 ] , match [ 10 ] + mmmext , match [ 11 ] ) ;
438
448
439
449
let valid = match [ 12 ] === 'A' ;
440
450
441
451
let pressureAltitude = match [ 13 ] === '00000' ? null : parseInt ( match [ 13 ] , 10 ) ;
442
452
let gpsAltitude = match [ 14 ] === '00000' ? null : parseInt ( match [ 14 ] , 10 ) ;
443
453
444
- let extensions : IGCParser . RecordExtensions = { } ;
445
- if ( this . fixExtensions ) {
446
- for ( let { code, start, length } of this . fixExtensions ) {
447
- extensions [ code ] = line . slice ( start , start + length ) ;
448
- }
449
- }
450
-
451
454
let enl = null ;
452
455
if ( extensions [ 'ENL' ] ) {
453
456
let enlLength = this . fixExtensions . filter ( it => it . code === 'ENL' ) [ 0 ] . length ;
0 commit comments