static void correct_case(cdtext &text) { // check if all titles share a single case bool first = true; bool upper; if (!single_case(text.album, upper, first) || !single_case(text.artist, upper, first)) return; for (int32 i = 0; i < text.track_count; i++) { if (!single_case(text.titles[i], upper, first) || !single_case(text.artists[i], upper, first)) return; } // If we get here, everything has a single case; we fix that // and capitalize each word capitalize_string(text.album); capitalize_string(text.artist); for (int32 i = 0; i < text.track_count; i++) { capitalize_string(text.titles[i]); capitalize_string(text.artists[i]); } }
static int show_latex_field_table( char *driver_name, unsigned long structures_to_show, mx_bool_type show_all_fields, mx_bool_type show_link, mx_bool_type debug ) { static const char fname[] = "show_latex_field_table()"; MX_DRIVER *driver; MX_DRIVER *superclass_driver, *class_driver; MX_RECORD_FIELD_DEFAULTS *field_defaults_array, *field_defaults; char link_name[MXU_DRIVER_NAME_LENGTH+20]; char macro_name[MXU_DRIVER_NAME_LENGTH+20]; unsigned long i; int status; if ( debug ) { fprintf(stderr, "%s invoked for driver '%s'\n", fname, driver_name); } /* Get the requested driver. */ driver = mx_get_driver_by_name( driver_name ); if ( driver == (MX_DRIVER *) NULL ) { fprintf( stderr, "The MX driver '%s' was not found.\n", driver_name ); exit(1); } /* The pointers to the number of record fields and the record * field defaults array must both be non-NULL for us to proceed. */ if ( ( driver->num_record_fields == NULL ) || ( driver->record_field_defaults_ptr == NULL ) ) { /* This driver has no fields available and is not currently * useable, so we do not try to do anything further with it. */ return SUCCESS; } if ( show_link ) { /* Construct the field link for this driver. */ if ( structures_to_show & MXF_REC_RECORD_STRUCT ) { /* We do not need a link for this case. */ show_link = FALSE; } else if ( structures_to_show & MXF_REC_SUPERCLASS_STRUCT ) { strlcpy( link_name, "\\MxLinkRecordFields", sizeof(link_name) ); } else if ( structures_to_show & MXF_REC_CLASS_STRUCT ) { superclass_driver = mx_get_superclass_driver_by_type( driver->mx_superclass ); if ( superclass_driver == (MX_DRIVER *) NULL ) { fprintf(stderr, "Driver superclass %ld for MX driver '%s' " "was not found.\n", driver->mx_superclass, driver_name ); exit(1); } create_latex_command( link_name, sizeof(link_name), "\\MxLink%sFields", capitalize_string( superclass_driver->name ) ); } else if ( structures_to_show & MXF_REC_TYPE_STRUCT ) { class_driver = mx_get_class_driver_by_type( driver->mx_class ); if ( class_driver == (MX_DRIVER *) NULL ) { fprintf(stderr, "Driver class %ld for MX driver '%s' " "was not found.\n", driver->mx_class, driver_name ); exit(1); } create_latex_command( link_name, sizeof(link_name), "\\MxLink%sFields", capitalize_string( class_driver->name ) ); } else { /* We do not need a link for this case. */ show_link = FALSE; } } /* Print out a header for the LaTeX table. */ create_latex_command( macro_name, sizeof(macro_name), "\\Mx%sDriverFields", capitalize_string(driver->name) ); /* Create the command to display the field table. */ printf( " \\newcommand{%s}{\n", macro_name ); printf( " \\begin{tabularx}{1.0\\textwidth}{@{\\extracolsep{\\fill}} |c|c|c|c|X|}\n" ); printf( " \\hline\n" ); printf( " \\MxTextFieldName & \\MxTextFieldType & \\MxTextNumDimensions\n" ); printf( " & \\MxTextSizes & \\MxTextDescription \\\\\n" ); printf( " \\hline\n" ); if ( show_link ) { printf( " \\multicolumn{5}{|c|}{%s} \\\\\n", link_name ); printf( " \\hline\n" ); } /* Show the field list. */ field_defaults_array = *(driver->record_field_defaults_ptr); for ( i = 0; i < *(driver->num_record_fields); i++ ) { field_defaults = &field_defaults_array[i]; if ( ( show_all_fields == TRUE ) || ( field_defaults->flags & MXFF_IN_DESCRIPTION ) ) { if ( field_defaults->structure_id & structures_to_show ) { status = show_latex_field( driver, field_defaults, debug ); } } } printf( " \\end{tabularx}\n" ); printf( "}\n" ); MXW_UNUSED( status ); return SUCCESS; }
static int show_latex_field( MX_DRIVER *driver, MX_RECORD_FIELD_DEFAULTS *field_defaults, mx_bool_type debug ) { char buffer[500]; char *name_ptr; int c; const char *type_ptr; unsigned long i, j, length; long dimension, num_dimensions; long field_is_varargs; field_is_varargs = ( field_defaults->flags & MXFF_VARARGS ); /* Print out the field name with LaTeX escapes for underscores. */ name_ptr = field_defaults->name; length = strlen(name_ptr); for ( i = 0, j = 0; i < length; i++, j++ ) { if ( name_ptr[i] == '_' ) { buffer[j] = '\\'; j++; } buffer[j] = name_ptr[i]; } buffer[j] = '\0'; printf( " \\textit{%s} & ", buffer ); /* Print out the field datatype in lower case with the MXFT_ prefix * removed and with LaTeX escapes for underscores. */ type_ptr = mx_get_field_type_string( field_defaults->datatype ); type_ptr += 5; length = strlen(type_ptr); for ( i = 0, j = 0; i < length; i++, j++ ) { if ( type_ptr[i] == '_' ) { buffer[j] = '\\'; j++; } c = type_ptr[i]; buffer[j] = tolower(c); } buffer[j] = '\0'; printf( "%s & ", buffer ); /* Display the number of dimensions. */ if ( field_defaults->num_dimensions < 0 ) { num_dimensions = MXU_FIELD_MAX_DIMENSIONS; printf( " \\textit{%s} & ", find_varargs_field_name( driver, field_defaults->num_dimensions, debug ) ); } else { num_dimensions = field_defaults->num_dimensions; printf( "%ld & ", num_dimensions ); } /* Display each of the dimensions in turn. */ if ( num_dimensions == 0 ) { printf( "0" ); } else if ( num_dimensions == 1 ) { dimension = field_defaults->dimension[0]; if ( dimension < 0 ) { printf( "\\textit{%s}", find_varargs_field_name( driver, dimension, debug ) ); } else { printf( "%ld", dimension ); } } else { printf( "( " ); for ( i = 0; i < num_dimensions; i++ ) { if ( i > 0 ) { printf( ", " ); } dimension = field_defaults->dimension[i]; if ( dimension < 0 ) { printf( "\\textit{%s}", find_varargs_field_name( driver, dimension, debug ) ); } else { printf( "%ld", dimension ); } } printf( " )" ); } { char field_command[250]; create_latex_command( field_command, sizeof(field_command), "\\MxField%s%s", capitalize_string(driver->name), capitalize_string(field_defaults->name) ); printf( " & $\\ifthenelse{\\isundefined{%s}}{\\relax}" "{\\begin{varwidth}{1.0\\linewidth}" "\\raggedright" "\\vspace*{1mm}%s\\vspace*{3mm}" "\\end{varwidth}}$ \\\\\n", field_command, field_command ); } printf( " \\hline\n" ); MXW_UNUSED( field_is_varargs ); return SUCCESS; }