66 , CueSheet = require ( './cuesheet' ) . CueSheet
77 , File = require ( './cuesheet' ) . File
88 , Index = require ( './cuesheet' ) . Index
9- , Time = require ( './cuesheet' ) . Time ;
10-
9+ , Time = require ( './cuesheet' ) . Time
10+ , chardet = require ( 'chardet' ) ;
1111
1212 var commandMap = {
1313 'CATALOG' : parseCatalog ,
@@ -45,18 +45,31 @@ exports = module.exports;
4545 throw new Error ( 'file ' + filename + ' does not exist' ) ;
4646 }
4747
48- lines = fs . readFileSync ( filename , { encoding : 'utf8' , flag : 'r' } )
48+ cuesheet . encoding = chardet . detect ( fs . readFileSync ( filename ) ) ;
49+ let encoding = cuesheet . encoding ;
50+
51+ switch ( cuesheet . encoding ) {
52+ case 'ISO-8859-1' :
53+ encoding = 'binary' ;
54+ break ;
55+ }
56+
57+ lines = fs . readFileSync ( filename , { encoding : encoding , flag : 'r' } )
4958 . replace ( / \r \n / , '\n' ) . split ( '\n' ) ;
5059
5160 lines . forEach ( function ( line ) {
5261 if ( ! line . match ( / ^ \s * $ / ) ) {
5362 lineParser = parseCommand ( line ) ;
5463 commandMap [ lineParser . command ] ( lineParser . params , cuesheet ) ;
55- } ;
64+ }
5665 } ) ;
5766
67+ if ( ! cuesheet . files [ cuesheet . files . length - 1 ] . name ) {
68+ cuesheet . files . pop ( ) ;
69+ }
70+
5871 return cuesheet ;
59- }
72+ } ;
6073
6174function parseCatalog ( params , cuesheet ) {
6275 cuesheet . catalog = params [ 0 ] ;
@@ -67,9 +80,11 @@ function parseCdTextFile(params, cuesheet) {
6780}
6881
6982function parseFile ( params , cuesheet ) {
70- var file ;
83+ var file = cuesheet . getCurrentFile ( ) ;
7184
72- file = cuesheet . newFile ( ) . getCurrentFile ( ) ;
85+ if ( ! file || file . name ) {
86+ file = cuesheet . newFile ( ) ;
87+ }
7388
7489 file . name = params [ 0 ] ;
7590 file . type = params [ 1 ] ;
@@ -99,7 +114,12 @@ function parseIndex(params, cuesheet) {
99114 }
100115
101116 if ( number < 0 || number > 99 ) {
102- throw new Error ( 'Index nubmer must between 0 and 99: ' , number ) ;
117+ throw new Error ( 'Index number must between 0 and 99: ' , number ) ;
118+ }
119+
120+ if ( number === 1 && time . min === 0 && time . min === 0 && time . sec === 0 && time . frame === 0 ) {
121+ cuesheet . newFile ( ) ;
122+ return ;
103123 }
104124
105125 if ( ! track . indexes ) {
0 commit comments