diff --git a/cue_parser.y b/cue_parser.y index 3b74ea5..c648e04 100644 --- a/cue_parser.y +++ b/cue_parser.y @@ -122,12 +122,14 @@ Cd *cue_parse_string(const char*); /* REM */ %type rem_item %token DATE -%token COMMENT %token XXX_GENRE /* parsed in REM but stored in CD-TEXT */ %token REPLAYGAIN_ALBUM_GAIN %token REPLAYGAIN_ALBUM_PEAK %token REPLAYGAIN_TRACK_GAIN %token REPLAYGAIN_TRACK_PEAK +%token COMMENT +%token DISCNUMBER +%token TOTALDISCS %% cuefile @@ -312,11 +314,13 @@ rem rem_item : DATE - | COMMENT | REPLAYGAIN_ALBUM_GAIN | REPLAYGAIN_ALBUM_PEAK | REPLAYGAIN_TRACK_GAIN | REPLAYGAIN_TRACK_PEAK + | COMMENT + | DISCNUMBER + | TOTALDISCS ; end_cd diff --git a/cue_scanner.l b/cue_scanner.l index 8a190b7..7ea71d0 100644 --- a/cue_scanner.l +++ b/cue_scanner.l @@ -102,7 +102,6 @@ ISRC { BEGIN(NAME); return TRACK_ISRC; } REM { BEGIN(REM); /* exclusive rules for special exceptions */ } DATE { BEGIN(NAME); yylval.ival = REM_DATE; return DATE; } -COMMENT { BEGIN(NAME); yylval.ival = REM_COMMENT; return COMMENT; } GENRE { BEGIN(NAME); yylval.ival = PTI_GENRE; return XXX_GENRE; } REPLAYGAIN_ALBUM_GAIN { BEGIN(RPG); yylval.ival = REM_REPLAYGAIN_ALBUM_GAIN; return REPLAYGAIN_ALBUM_GAIN; } @@ -112,6 +111,9 @@ REM { BEGIN(REM); /* exclusive rules for special exceptions */ } return REPLAYGAIN_TRACK_GAIN; } REPLAYGAIN_TRACK_PEAK { BEGIN(RPG); yylval.ival = REM_REPLAYGAIN_TRACK_PEAK; return REPLAYGAIN_TRACK_PEAK; } +COMMENT { BEGIN(NAME); yylval.ival = REM_COMMENT; return COMMENT; } +DISCNUMBER { BEGIN(NAME); yylval.ival = REM_DISCNUMBER; return DISCNUMBER; } +TOTALDISCS { BEGIN(NAME); yylval.ival = REM_TOTALDISCS; return TOTALDISCS; } {ws}+ { BEGIN(REM); } . { BEGIN(REM); } diff --git a/libcue.h b/libcue.h index 642042e..e2c70f8 100644 --- a/libcue.h +++ b/libcue.h @@ -98,11 +98,13 @@ enum Pti { enum RemType { REM_DATE, /* date of cd/track */ - REM_COMMENT, REM_REPLAYGAIN_ALBUM_GAIN, REM_REPLAYGAIN_ALBUM_PEAK, REM_REPLAYGAIN_TRACK_GAIN, REM_REPLAYGAIN_TRACK_PEAK, + REM_COMMENT, + REM_DISCNUMBER, + REM_TOTALDISCS, REM_END /* terminating REM (for stepping through REMs) */ }; diff --git a/rem.c b/rem.c index 3ebd099..3900a44 100644 --- a/rem.c +++ b/rem.c @@ -38,11 +38,13 @@ rem_new( void) Rem rem[] = { {REM_DATE, NULL}, - {REM_COMMENT, NULL}, {REM_REPLAYGAIN_ALBUM_GAIN, NULL}, {REM_REPLAYGAIN_ALBUM_PEAK, NULL}, {REM_REPLAYGAIN_TRACK_GAIN, NULL}, {REM_REPLAYGAIN_TRACK_PEAK, NULL}, + {REM_COMMENT, NULL}, + {REM_DISCNUMBER, NULL}, + {REM_TOTALDISCS, NULL}, {REM_END, NULL} }; diff --git a/t/standard_cue.c b/t/standard_cue.c index 52846a7..4177bf9 100644 --- a/t/standard_cue.c +++ b/t/standard_cue.c @@ -13,6 +13,8 @@ int tests_run; static char cue[] = "REM GENRE Alternative\n" "REM DATE 1991\n" "REM DISCID 860B640B\n" + "REM DISCNUMBER 1\n" + "REM TOTALDISCS 2\n" "REM COMMENT \"ExactAudioCopy v0.95b4\"\n" "PERFORMER \"My Bloody Valentine\"\n" "TITLE \"Loveless\"\n" @@ -54,6 +56,14 @@ static char* cue_test() mu_assert ("error getting CD date", val != NULL); mu_assert ("error validating CD date", strcmp (val, "1991") == 0); + val = rem_get (REM_DISCNUMBER, rem); + mu_assert ("error getting CD disc number", val != NULL); + mu_assert ("error validating CD disc number", strcmp (val, "1") == 0); + + val = rem_get (REM_TOTALDISCS, rem); + mu_assert ("error getting CD total discs", val != NULL); + mu_assert ("error validating CD total discs", strcmp (val, "2") == 0); + val = rem_get (REM_COMMENT, rem); mu_assert ("error getting CD comment", val != NULL); mu_assert ("error validating CD comment", strcmp (val, "ExactAudioCopy v0.95b4") == 0);