Added handling of escapes (\n and \t for now) to track section.
Added handling of field width and flags to track section (this needs work).
This commit is contained in:
@@ -109,46 +109,47 @@ void disc_field (char *c, Cd *cd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void track_field (char *c, Cd *cd, int trackno)
|
void track_field (char *c, Cd *cd, int trackno, int width)
|
||||||
{
|
{
|
||||||
Track *track = NULL;
|
Track *track = NULL;
|
||||||
Cdtext *cdtext = NULL;
|
Cdtext *cdtext = NULL;
|
||||||
|
|
||||||
track = cd_get_track(cd, trackno);
|
track = cd_get_track(cd, trackno);
|
||||||
cdtext = track_get_cdtext(track);
|
cdtext = track_get_cdtext(track);
|
||||||
|
|
||||||
switch (*c) {
|
switch (*c) {
|
||||||
case 'a':
|
case 'a':
|
||||||
printf("%s", cdtext_get(PTI_ARRANGER, cdtext));
|
printf("%*s", width, cdtext_get(PTI_ARRANGER, cdtext));
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
printf("%s", cdtext_get(PTI_COMPOSER, cdtext));
|
printf("%*s", width, cdtext_get(PTI_COMPOSER, cdtext));
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
printf("%s", track_get_filename(track));
|
printf("%*s", width, track_get_filename(track));
|
||||||
break;
|
break;
|
||||||
case 'g':
|
case 'g':
|
||||||
printf("%s", cdtext_get(PTI_GENRE, cdtext));
|
printf("%*s", width, cdtext_get(PTI_GENRE, cdtext));
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
printf("%s", track_get_isrc(track));
|
printf("%*s", width, track_get_isrc(track));
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
printf("%s", cdtext_get(PTI_MESSAGE, cdtext));
|
printf("%*s", width, cdtext_get(PTI_MESSAGE, cdtext));
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
printf("%0*d", 2, trackno);
|
printf("%0*d", width, trackno);
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
printf("%s", cdtext_get(PTI_PERFORMER, cdtext));
|
printf("%*s", width, cdtext_get(PTI_PERFORMER, cdtext));
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
printf("%s", cdtext_get(PTI_SONGWRITER, cdtext));
|
printf("%*s", width, cdtext_get(PTI_SONGWRITER, cdtext));
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
printf("%s", cdtext_get(PTI_TITLE, cdtext));
|
printf("%*s", width, cdtext_get(PTI_TITLE, cdtext));
|
||||||
break;
|
break;
|
||||||
case 'u':
|
case 'u':
|
||||||
printf("%s", cdtext_get(PTI_UPC_ISRC, cdtext));
|
printf("%*s", width, cdtext_get(PTI_UPC_ISRC, cdtext));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
disc_field(c, cd);
|
disc_field(c, cd);
|
||||||
@@ -161,6 +162,13 @@ void print_info (Cd *cd)
|
|||||||
int i; /* track */
|
int i; /* track */
|
||||||
char *c;
|
char *c;
|
||||||
|
|
||||||
|
/* field flags */
|
||||||
|
int flag = 1; /* flags remain */
|
||||||
|
int zeropad = 0;
|
||||||
|
|
||||||
|
/* field width */
|
||||||
|
int width;
|
||||||
|
|
||||||
for (c = d_template; '\0' != *c; c++) {
|
for (c = d_template; '\0' != *c; c++) {
|
||||||
if ('%' == *c) {
|
if ('%' == *c) {
|
||||||
c++;
|
c++;
|
||||||
@@ -172,9 +180,42 @@ void print_info (Cd *cd)
|
|||||||
|
|
||||||
for (i = 1; i <= cd_get_ntrack(cd); i++) {
|
for (i = 1; i <= cd_get_ntrack(cd); i++) {
|
||||||
for (c = t_template; '\0' != *c; c++) {
|
for (c = t_template; '\0' != *c; c++) {
|
||||||
if ('%' == *c) {
|
if ('\\' == *c) {
|
||||||
c++;
|
c++;
|
||||||
track_field(c, cd, i);
|
|
||||||
|
switch (*c) {
|
||||||
|
case 'n':
|
||||||
|
putchar('\n');
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
putchar('\t');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
putchar(*c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if ('%' == *c) {
|
||||||
|
c++;
|
||||||
|
|
||||||
|
/* parse flags */
|
||||||
|
do {
|
||||||
|
switch (*c) {
|
||||||
|
case '0': /* zero-padding */
|
||||||
|
c++;
|
||||||
|
zeropad = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
flag = 0;
|
||||||
|
}
|
||||||
|
} while (0 != flag);
|
||||||
|
|
||||||
|
/* parse width */
|
||||||
|
width = 0;
|
||||||
|
while (0 != isdigit(*c)) {
|
||||||
|
width = width * 10 + *c++ - '0';
|
||||||
|
}
|
||||||
|
|
||||||
|
track_field(c, cd, i, width);
|
||||||
} else {
|
} else {
|
||||||
putchar(*c);
|
putchar(*c);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user