|
Packit Service |
fb6fa5 |
/* GTK - The GIMP Toolkit
|
|
Packit Service |
fb6fa5 |
* Copyright (C) 2006 Matthias Clasen
|
|
Packit Service |
fb6fa5 |
*
|
|
Packit Service |
fb6fa5 |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
fb6fa5 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
fb6fa5 |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
fb6fa5 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit Service |
fb6fa5 |
*
|
|
Packit Service |
fb6fa5 |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
fb6fa5 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
fb6fa5 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
fb6fa5 |
* Lesser General Public License for more details.
|
|
Packit Service |
fb6fa5 |
*
|
|
Packit Service |
fb6fa5 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
fb6fa5 |
* License along with this library; if not, write to the
|
|
Packit Service |
fb6fa5 |
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Packit Service |
fb6fa5 |
* Boston, MA 02111-1307, USA.
|
|
Packit Service |
fb6fa5 |
*/
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
#include <stdlib.h>
|
|
Packit Service |
fb6fa5 |
#include <stdio.h>
|
|
Packit Service |
fb6fa5 |
#include <string.h>
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
#include <glib.h>
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
#include "paper_names.c"
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static const gint n_infos = G_N_ELEMENTS (standard_names);
|
|
Packit Service |
fb6fa5 |
static const gint n_extra = G_N_ELEMENTS (extra_ppd_names);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
typedef struct {
|
|
Packit Service |
fb6fa5 |
const gchar *s;
|
|
Packit Service |
fb6fa5 |
gint len;
|
|
Packit Service |
fb6fa5 |
gint suffix;
|
|
Packit Service |
fb6fa5 |
gint offset;
|
|
Packit Service |
fb6fa5 |
} NameInfo;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static NameInfo *names = NULL;
|
|
Packit Service |
fb6fa5 |
static gint n_names = 0;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static void
|
|
Packit Service |
fb6fa5 |
add_name (const gchar *name)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
names[n_names].s = name;
|
|
Packit Service |
fb6fa5 |
names[n_names].len = strlen (name);
|
|
Packit Service |
fb6fa5 |
names[n_names].suffix = -1;
|
|
Packit Service |
fb6fa5 |
names[n_names].offset = 0;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
n_names++;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static gint
|
|
Packit Service |
fb6fa5 |
find_name (const gchar *name)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
gint i;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
if (!name)
|
|
Packit Service |
fb6fa5 |
return -1;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_names; i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
if (strcmp (names[i].s, name) == 0)
|
|
Packit Service |
fb6fa5 |
return names[i].offset;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
fprintf (stderr, "BOO! %s not found\n", name);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
return -2;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
#define MM_PER_INCH 25.4
|
|
Packit Service |
fb6fa5 |
#define POINTS_PER_INCH 72
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
static gboolean
|
|
Packit Service |
fb6fa5 |
parse_media_size (const gchar *size,
|
|
Packit Service |
fb6fa5 |
gdouble *width_mm,
|
|
Packit Service |
fb6fa5 |
gdouble *height_mm)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
const gchar *p;
|
|
Packit Service |
fb6fa5 |
gchar *e;
|
|
Packit Service |
fb6fa5 |
gdouble short_dim, long_dim;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
p = size;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
short_dim = g_ascii_strtod (p, &e);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
if (p == e || *e != 'x')
|
|
Packit Service |
fb6fa5 |
return FALSE;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
p = e + 1; /* Skip x */
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
long_dim = g_ascii_strtod (p, &e);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
if (p == e)
|
|
Packit Service |
fb6fa5 |
return TRUE;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
p = e;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
if (strcmp (p, "in") == 0)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
short_dim = short_dim * MM_PER_INCH;
|
|
Packit Service |
fb6fa5 |
long_dim = long_dim * MM_PER_INCH;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
else if (strcmp (p, "mm") != 0)
|
|
Packit Service |
fb6fa5 |
return FALSE;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
if (width_mm)
|
|
Packit Service |
fb6fa5 |
*width_mm = short_dim;
|
|
Packit Service |
fb6fa5 |
if (height_mm)
|
|
Packit Service |
fb6fa5 |
*height_mm = long_dim;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
return TRUE;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
int
|
|
Packit Service |
fb6fa5 |
main (int argc, char *argv[])
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
gint i, j, offset;
|
|
Packit Service |
fb6fa5 |
gdouble width, height;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
names = (NameInfo *) malloc (sizeof (NameInfo) * (4 + n_infos + 2 * n_extra));
|
|
Packit Service |
fb6fa5 |
n_names = 0;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* collect names */
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_infos; i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
add_name (standard_names[i].name);
|
|
Packit Service |
fb6fa5 |
add_name (standard_names[i].display_name);
|
|
Packit Service |
fb6fa5 |
if (standard_names[i].ppd_name)
|
|
Packit Service |
fb6fa5 |
add_name (standard_names[i].ppd_name);
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_extra; i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
add_name (extra_ppd_names[i].ppd_name);
|
|
Packit Service |
fb6fa5 |
add_name (extra_ppd_names[i].standard_name);
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* find suffixes and dupes */
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_names; i++)
|
|
Packit Service |
fb6fa5 |
for (j = 0; j < n_names; j++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
if (i == j) continue;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
if (names[i].len < names[j].len ||
|
|
Packit Service |
fb6fa5 |
(names[i].len == names[j].len && j < i))
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
if (strcmp (names[i].s, names[j].s + names[j].len - names[i].len) == 0)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
names[i].suffix = j;
|
|
Packit Service |
fb6fa5 |
break;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* calculate offsets for regular entries */
|
|
Packit Service |
fb6fa5 |
offset = 0;
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_names; i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
if (names[i].suffix == -1)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
names[i].offset = offset;
|
|
Packit Service |
fb6fa5 |
offset += names[i].len + 1;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* calculate offsets for suffixes */
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_names; i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
if (names[i].suffix != -1)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
j = i;
|
|
Packit Service |
fb6fa5 |
do {
|
|
Packit Service |
fb6fa5 |
j = names[j].suffix;
|
|
Packit Service |
fb6fa5 |
} while (names[j].suffix != -1);
|
|
Packit Service |
fb6fa5 |
names[i].offset = names[j].offset + names[j].len - names[i].len;
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
printf ("/* Generated by gen-paper-names */\n\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* write N_ marked names */
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
printf ("#if 0\n");
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_infos; i++)
|
|
Packit Service |
fb6fa5 |
printf ("NC_(\"paper size\", \"%s\")\n", standard_names[i].display_name);
|
|
Packit Service |
fb6fa5 |
printf ("#endif\n\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* write strings */
|
|
Packit Service |
fb6fa5 |
printf ("static const char paper_names[] =");
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_names; i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
if (names[i].suffix == -1)
|
|
Packit Service |
fb6fa5 |
printf ("\n \"%s\\0\"", names[i].s);
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
printf (";\n\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* dump PaperInfo array */
|
|
Packit Service |
fb6fa5 |
printf ("typedef struct {\n"
|
|
Packit Service |
fb6fa5 |
" int name;\n"
|
|
Packit Service |
fb6fa5 |
" float width;\n"
|
|
Packit Service |
fb6fa5 |
" float height;\n"
|
|
Packit Service |
fb6fa5 |
" int display_name;\n"
|
|
Packit Service |
fb6fa5 |
" int ppd_name;\n"
|
|
Packit Service |
fb6fa5 |
"} PaperInfo;\n\n"
|
|
Packit Service |
fb6fa5 |
"static const PaperInfo standard_names_offsets[] = {\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_infos; i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
width = height = 0.0;
|
|
Packit Service |
fb6fa5 |
if (!parse_media_size (standard_names[i].size, &width, &height))
|
|
Packit Service |
fb6fa5 |
printf ("failed to parse size %s\n", standard_names[i].size);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
printf (" { %4d, %g, %g, %4d, %4d },\n",
|
|
Packit Service |
fb6fa5 |
find_name (standard_names[i].name),
|
|
Packit Service |
fb6fa5 |
width, height,
|
|
Packit Service |
fb6fa5 |
find_name (standard_names[i].display_name),
|
|
Packit Service |
fb6fa5 |
find_name (standard_names[i].ppd_name));
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
printf ("};\n\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* dump extras */
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
printf ("static const struct {\n"
|
|
Packit Service |
fb6fa5 |
" int ppd_name;\n"
|
|
Packit Service |
fb6fa5 |
" int standard_name;\n"
|
|
Packit Service |
fb6fa5 |
"} extra_ppd_names_offsets[] = {\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
for (i = 0; i < n_extra; i++)
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
printf (" { %4d, %4d },\n",
|
|
Packit Service |
fb6fa5 |
find_name (extra_ppd_names[i].ppd_name),
|
|
Packit Service |
fb6fa5 |
find_name (extra_ppd_names[i].standard_name));
|
|
Packit Service |
fb6fa5 |
}
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
printf ("};\n\n");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
return 0;
|
|
Packit Service |
fb6fa5 |
}
|