Exemplo n.º 1
0
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]);
	}
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}