actual char #, not 0 based index.
* lily/system-start-delimiter.cc (staff_brace): Start at 65.
* mf/feta-beugel.mf: Actually start at char #65. Add header.
Warning: do make -C mf clean.
* scm/output-gnome.scm: Add ec-fonts-mftraced to ~/.fonts.conf.
Grok ec-fonts, braces and dynamics.
* scm/framework-gnome.scm (gnome-main): Register braces with pango.
2004-11-14 Jan Nieuwenhuizen <janneke@gnu.org>
2004-11-14 Jan Nieuwenhuizen <janneke@gnu.org>
- * lily/context-property.cc: compile fix.
+ * lily/font-metric.cc (get_indexed_char_stencil): Bugfix: get
+ actual char #, not 0 based index.
+
+ * lily/system-start-delimiter.cc (staff_brace): Start at 65.
+
+ * mf/feta-beugel.mf: Actually start at char #65. Add header.
+ Warning: do make -C mf clean.
+
+ * lily/context-property.cc: Compile fix.
* scm/output-gnome.scm: Add ec-fonts-mftraced to ~/.fonts.conf.
Grok ec-fonts, braces and dynamics.
* scm/output-gnome.scm: Add ec-fonts-mftraced to ~/.fonts.conf.
Grok ec-fonts, braces and dynamics.
* (C) 1988, 1989, 1990 by Adobe Systems Incorporated. All rights reserved.
*
* This file may be freely copied and redistributed as long as:
* (C) 1988, 1989, 1990 by Adobe Systems Incorporated. All rights reserved.
*
* This file may be freely copied and redistributed as long as:
- * 1) This entire notice continues to be included in the file,
+ * 1) This entire notice continues to be included in the file,
* 2) If the file has been modified in any way, a notice of such
* modification is conspicuously indicated.
*
* PostScript, Display PostScript, and Adobe are registered trademarks of
* Adobe Systems Incorporated.
* 2) If the file has been modified in any way, a notice of such
* modification is conspicuously indicated.
*
* PostScript, Display PostScript, and Adobe are registered trademarks of
* Adobe Systems Incorporated.
* ************************************************************************
* THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT
* NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS
* ************************************************************************
* THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT
* NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS
- * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR
- * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY
- * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION,
- * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
+ * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR
+ * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY
+ * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION,
+ * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
* ************************************************************************
*/
/* parseAFM.c
* FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
* ************************************************************************
*/
/* parseAFM.c
* This file is used in conjuction with the parseAFM.h header file.
* This file contains several procedures that are used to parse AFM
* files. It is intended to work with an application program that needs
* font metric information. The program can be used as is by making a
* procedure call to "parseFile" (passing in the expected parameters)
* This file is used in conjuction with the parseAFM.h header file.
* This file contains several procedures that are used to parse AFM
* files. It is intended to work with an application program that needs
* font metric information. The program can be used as is by making a
* procedure call to "parseFile" (passing in the expected parameters)
- * and having it fill in a data structure with the data from the
+ * and having it fill in a data structure with the data from the
* AFM file, or an application developer may wish to customize this
* code.
*
* AFM file, or an application developer may wish to customize this
* code.
*
static char *ident = NULL; /* storage buffer for keywords */
static char *ident = NULL; /* storage buffer for keywords */
-/* "shorts" for fast case statement
+/* "shorts" for fast case statement
* The values of each of these enumerated items correspond to an entry in the
* The values of each of these enumerated items correspond to an entry in the
- * table of strings defined below. Therefore, if you add a new string as
+ * table of strings defined below. Therefore, if you add a new string as
* new keyword into the keyStrings table, you must also add a corresponding
* parseKey AND it MUST be in the same position!
*
* IMPORTANT: since the sorting algorithm is a binary search, the strings of
* new keyword into the keyStrings table, you must also add a corresponding
* parseKey AND it MUST be in the same position!
*
* IMPORTANT: since the sorting algorithm is a binary search, the strings of
- * keywords must be placed in lexicographical order, below. [Therefore, the
- * enumerated items are not necessarily in lexicographical order, depending
- * on the name chosen. BUT, they must be placed in the same position as the
- * corresponding key string.] The NOPE shall remain in the last position,
- * since it does not correspond to any key string, and it is used in the
+ * keywords must be placed in lexicographical order, below. [Therefore, the
+ * enumerated items are not necessarily in lexicographical order, depending
+ * on the name chosen. BUT, they must be placed in the same position as the
+ * corresponding key string.] The NOPE shall remain in the last position,
+ * since it does not correspond to any key string, and it is used in the
* "recognize" procedure to calculate how many possible keys there are.
*/
enum parseKey {
* "recognize" procedure to calculate how many possible keys there are.
*/
enum parseKey {
- ASCENDER, CHARBBOX, CODE, COMPCHAR, CAPHEIGHT, COMMENT,
- DESCENDER, ENCODINGSCHEME, ENDCHARMETRICS, ENDCOMPOSITES,
- ENDFONTMETRICS, ENDKERNDATA, ENDKERNPAIRS, ENDTRACKKERN,
+ ASCENDER, CHARBBOX, CODE, COMPCHAR, CAPHEIGHT, COMMENT,
+ DESCENDER, ENCODINGSCHEME, ENDCHARMETRICS, ENDCOMPOSITES,
+ ENDFONTMETRICS, ENDKERNDATA, ENDKERNPAIRS, ENDTRACKKERN,
FAMILYNAME, FONTBBOX, FONTNAME, FULLNAME,
FAMILYNAME, FONTBBOX, FONTNAME, FULLNAME,
- ISFIXEDPITCH,
- ITALICANGLE, KERNPAIR, KERNPAIRXAMT, LIGATURE, CHARNAME,
- NOTICE, COMPCHARPIECE, STARTCHARMETRICS, STARTCOMPOSITES,
- STARTFONTMETRICS, STARTKERNDATA, STARTKERNPAIRS,
- STARTTRACKKERN, TRACKKERN, UNDERLINEPOSITION,
+ ISFIXEDPITCH,
+ ITALICANGLE, KERNPAIR, KERNPAIRXAMT, LIGATURE, CHARNAME,
+ NOTICE, COMPCHARPIECE, STARTCHARMETRICS, STARTCOMPOSITES,
+ STARTFONTMETRICS, STARTKERNDATA, STARTKERNPAIRS,
+ STARTTRACKKERN, TRACKKERN, UNDERLINEPOSITION,
UNDERLINETHICKNESS, VERSION, XYWIDTH, XWIDTH, WEIGHT, XHEIGHT,
NOPE };
UNDERLINETHICKNESS, VERSION, XYWIDTH, XWIDTH, WEIGHT, XHEIGHT,
NOPE };
-/* keywords for the system:
+/* keywords for the system:
* This a table of all of the current strings that are vaild AFM keys.
* Each entry can be referenced by the appropriate parseKey value (an
* This a table of all of the current strings that are vaild AFM keys.
* Each entry can be referenced by the appropriate parseKey value (an
- * enumerated data type defined above). If you add a new keyword here,
+ * enumerated data type defined above). If you add a new keyword here,
* a corresponding parseKey MUST be added to the enumerated data type
* a corresponding parseKey MUST be added to the enumerated data type
- * defined above, AND it MUST be added in the same position as the
+ * defined above, AND it MUST be added in the same position as the
* string is in this table.
*
* IMPORTANT: since the sorting algorithm is a binary search, the keywords
* string is in this table.
*
* IMPORTANT: since the sorting algorithm is a binary search, the keywords
static char *keyStrings[] = {
"Ascender", "B", "C", "CC", "CapHeight", "Comment",
static char *keyStrings[] = {
"Ascender", "B", "C", "CC", "CapHeight", "Comment",
- "Descender", "EncodingScheme", "EndCharMetrics", "EndComposites",
- "EndFontMetrics", "EndKernData", "EndKernPairs", "EndTrackKern",
+ "Descender", "EncodingScheme", "EndCharMetrics", "EndComposites",
+ "EndFontMetrics", "EndKernData", "EndKernPairs", "EndTrackKern",
"FamilyName", "FontBBox", "FontName", "FullName",
#ifdef METATYPE1_BUG
"Generated",
"FamilyName", "FontBBox", "FontName", "FullName",
#ifdef METATYPE1_BUG
"Generated",
-#endif
- "IsFixedPitch",
- "ItalicAngle", "KP", "KPX", "L", "N",
- "Notice", "PCC", "StartCharMetrics", "StartComposites",
- "StartFontMetrics", "StartKernData", "StartKernPairs",
- "StartTrackKern", "TrackKern", "UnderlinePosition",
+#endif
+ "IsFixedPitch",
+ "ItalicAngle", "KP", "KPX", "L", "N",
+ "Notice", "PCC", "StartCharMetrics", "StartComposites",
+ "StartFontMetrics", "StartKernData", "StartKernPairs",
+ "StartTrackKern", "TrackKern", "UnderlinePosition",
"UnderlineThickness", "Version", "W", "WX", "Weight", "XHeight",
NULL };
"UnderlineThickness", "Version", "W", "WX", "Weight", "XHeight",
NULL };
-
-/*************************** PARSING ROUTINES **************/
-
+
+/*************************** PARSING ROUTINES **************/
+
/*************************** token *************************/
/* A "AFM File Conventions" tokenizer. That means that it will
* return the next token delimited by white space. See also
/*************************** token *************************/
/* A "AFM File Conventions" tokenizer. That means that it will
* return the next token delimited by white space. See also
- * the `linetoken' routine, which does a similar thing but
+ * the `linetoken' routine, which does a similar thing but
* reads all tokens until the next end-of-line.
*/
* reads all tokens until the next end-of-line.
*/
static char*
token (FILE *stream)
{
static char*
token (FILE *stream)
{
while ((ch = fgetc (stream)) == ' ' || ch == lineterm ||
ch == lineterm_alt ||
ch == ',' || ch == '\t' || ch == ';');
while ((ch = fgetc (stream)) == ' ' || ch == lineterm ||
ch == lineterm_alt ||
ch == ',' || ch == '\t' || ch == ';');
idx = 0;
while (idx < MAX_NAME - 1 &&
ch != EOF && ch != ' ' && ch != lineterm && ch != lineterm_alt
idx = 0;
while (idx < MAX_NAME - 1 &&
ch != EOF && ch != ' ' && ch != lineterm && ch != lineterm_alt
- && ch != '\t' && ch != ':' && ch != ';')
+ && ch != '\t' && ch != ':' && ch != ';')
{
ident[idx++] = ch;
ch = fgetc (stream);
{
ident[idx++] = ch;
ch = fgetc (stream);
if (idx >= 1 && ch != ':' ) ungetc (ch, stream);
if (idx < 1 ) ident[idx++] = ch; /* single-character token */
ident[idx] = 0;
if (idx >= 1 && ch != ':' ) ungetc (ch, stream);
if (idx < 1 ) ident[idx++] = ch; /* single-character token */
ident[idx] = 0;
return (ident); /* returns pointer to the token */
} /* token */
return (ident); /* returns pointer to the token */
} /* token */
- while ((ch = fgetc (stream)) == ' ' || ch == '\t' );
-
+ while ((ch = fgetc (stream)) == ' ' || ch == '\t' );
+
idx = 0;
while (idx < MAX_NAME - 1 &&
idx = 0;
while (idx < MAX_NAME - 1 &&
- ch != EOF && ch != lineterm && ch != lineterm_alt)
+ ch != EOF && ch != lineterm && ch != lineterm_alt)
{
ident[idx++] = ch;
ch = fgetc (stream);
} /* while */
{
ident[idx++] = ch;
ch = fgetc (stream);
} /* while */
ungetc (ch, stream);
ident[idx] = 0;
ungetc (ch, stream);
ident[idx] = 0;
/*************************** recognize *************************/
/* This function tries to match a string to a known list of
/*************************** recognize *************************/
/* This function tries to match a string to a known list of
- * valid AFM entries (check the keyStrings array above).
+ * valid AFM entries (check the keyStrings array above).
* "ident" contains everything from white space through the
* next space, tab, or ":" character.
*
* "ident" contains everything from white space through the
* next space, tab, or ":" character.
*
/* This function is called by "parseFile". It will parse the AFM File
* up to the "StartCharMetrics" keyword, which essentially marks the
* end of the Global Font Information and the beginning of the character
/* This function is called by "parseFile". It will parse the AFM File
* up to the "StartCharMetrics" keyword, which essentially marks the
* end of the Global Font Information and the beginning of the character
*
* If the caller of "parseFile" specified that it wanted the Global
* Font Information (as defined by the "AFM File Specification"
*
* If the caller of "parseFile" specified that it wanted the Global
* Font Information (as defined by the "AFM File Specification"
- * document), then that information will be stored in the returned
+ * document), then that information will be stored in the returned
- * Any Global Font Information entries that are not found in a
+ * Any Global Font Information entries that are not found in a
* given file, will have the usual default initialization value
* for its type (i.e. entries of type int will be 0, etc).
*
* given file, will have the usual default initialization value
* for its type (i.e. entries of type int will be 0, etc).
*
- * This function returns an error code specifying whether there was
- * a premature EOF or a parsing error. This return value is used by
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
* parseFile to determine if there is more file to parse.
*/
* parseFile to determine if there is more file to parse.
*/
static BOOL
parseGlobals (FILE *fp, register AFM_GlobalFontInfo *gfi)
static BOOL
parseGlobals (FILE *fp, register AFM_GlobalFontInfo *gfi)
BOOL cont = TRUE, save = (gfi != NULL);
int error = AFM_ok;
register char *keyword;
BOOL cont = TRUE, save = (gfi != NULL);
int error = AFM_ok;
register char *keyword;
while (cont)
{
keyword = token (fp);
while (cont)
{
keyword = token (fp);
if (keyword == NULL)
/* Have reached an early and unexpected EOF. */
/* Set flag and stop parsing */
if (keyword == NULL)
/* Have reached an early and unexpected EOF. */
/* Set flag and stop parsing */
error = AFM_earlyEOF;
break; /* get out of loop */
}
error = AFM_earlyEOF;
break; /* get out of loop */
}
/* get tokens until the end of the Global Font info section */
/* without saving any of the data */
/* get tokens until the end of the Global Font info section */
/* without saving any of the data */
- switch (recognize (keyword))
+ switch (recognize (keyword))
{
case STARTCHARMETRICS:
cont = FALSE;
{
case STARTCHARMETRICS:
cont = FALSE;
strcpy (gfi->afmVersion, keyword);
break;
case COMMENT:
strcpy (gfi->afmVersion, keyword);
break;
case COMMENT:
keyword = linetoken (fp);
break;
case FONTNAME:
keyword = linetoken (fp);
break;
case FONTNAME:
break;
case ENCODINGSCHEME:
keyword = token (fp);
break;
case ENCODINGSCHEME:
keyword = token (fp);
- gfi->encodingScheme = (char *)
+ gfi->encodingScheme = (char *)
malloc (strlen (keyword) + 1);
strcpy (gfi->encodingScheme, keyword);
malloc (strlen (keyword) + 1);
strcpy (gfi->encodingScheme, keyword);
case FULLNAME:
keyword = linetoken (fp);
gfi->fullName = (char *) malloc (strlen (keyword) + 1);
strcpy (gfi->fullName, keyword);
case FULLNAME:
keyword = linetoken (fp);
gfi->fullName = (char *) malloc (strlen (keyword) + 1);
strcpy (gfi->fullName, keyword);
- break;
- case FAMILYNAME:
+ break;
+ case FAMILYNAME:
keyword = linetoken (fp);
gfi->familyName = (char *) malloc (strlen (keyword) + 1);
strcpy (gfi->familyName, keyword);
keyword = linetoken (fp);
gfi->familyName = (char *) malloc (strlen (keyword) + 1);
strcpy (gfi->familyName, keyword);
case WEIGHT:
keyword = token (fp);
gfi->weight = (char *) malloc (strlen (keyword) + 1);
case WEIGHT:
keyword = token (fp);
gfi->weight = (char *) malloc (strlen (keyword) + 1);
keyword = token (fp);
if (MATCH (keyword, False))
gfi->isFixedPitch = 0;
keyword = token (fp);
if (MATCH (keyword, False))
gfi->isFixedPitch = 0;
case UNDERLINEPOSITION:
keyword = token (fp);
gfi->underlinePosition = atoi (keyword);
case UNDERLINEPOSITION:
keyword = token (fp);
gfi->underlinePosition = atoi (keyword);
case UNDERLINETHICKNESS:
keyword = token (fp);
gfi->underlineThickness = atoi (keyword);
case UNDERLINETHICKNESS:
keyword = token (fp);
gfi->underlineThickness = atoi (keyword);
keyword = linetoken (fp);
gfi->version = (char *) malloc (strlen (keyword) + 1);
strcpy (gfi->version, keyword);
keyword = linetoken (fp);
gfi->version = (char *) malloc (strlen (keyword) + 1);
strcpy (gfi->version, keyword);
case NOTICE:
keyword = linetoken (fp);
gfi->notice = (char *) malloc (strlen (keyword) + 1);
strcpy (gfi->notice, keyword);
case NOTICE:
keyword = linetoken (fp);
gfi->notice = (char *) malloc (strlen (keyword) + 1);
strcpy (gfi->notice, keyword);
case FONTBBOX:
keyword = token (fp);
gfi->fontBBox.llx = atoi (keyword);
case FONTBBOX:
keyword = token (fp);
gfi->fontBBox.llx = atoi (keyword);
break;
} /* switch */
} /* while */
break;
} /* switch */
} /* while */
/* Unmapped character codes are (at Adobe Systems) assigned the
* width of the space character (if one exists) else they get the
* value of 250 ems. This function initializes all entries in the
/* Unmapped character codes are (at Adobe Systems) assigned the
* width of the space character (if one exists) else they get the
* value of 250 ems. This function initializes all entries in the
- * char widths array to have this value. Then any mapped character
- * codes will be replaced with the width of the appropriate character
+ * char widths array to have this value. Then any mapped character
+ * codes will be replaced with the width of the appropriate character
* when parsing the character metric section.
* when parsing the character metric section.
* This function parses the Character Metrics Section looking
* for a space character (by comparing character names). If found,
* the width of the space character will be used to initialize the
* This function parses the Character Metrics Section looking
* for a space character (by comparing character names). If found,
* the width of the space character will be used to initialize the
- * values in the array of character widths.
+ * values in the array of character widths.
*
* Before returning, the position of the read/write pointer of the
* file is reset to be where it was upon entering this function.
*/
*
* Before returning, the position of the read/write pointer of the
* file is reset to be where it was upon entering this function.
*/
static int
initializeArray (FILE *fp, register int *cwi)
static int
initializeArray (FILE *fp, register int *cwi)
BOOL cont = TRUE, found = FALSE;
long opos = ftell (fp);
int code = 0, width = 0, i = 0, error = 0;
register char *keyword;
BOOL cont = TRUE, found = FALSE;
long opos = ftell (fp);
int code = 0, width = 0, i = 0, error = 0;
register char *keyword;
while (cont)
{
keyword = token (fp);
while (cont)
{
keyword = token (fp);
case XWIDTH:
width = atoi (token (fp));
break;
case XWIDTH:
width = atoi (token (fp));
break;
keyword = token (fp);
if (MATCH (keyword, Space))
keyword = token (fp);
if (MATCH (keyword, Space))
cont = FALSE;
found = TRUE;
cont = FALSE;
found = TRUE;
case ENDCHARMETRICS:
cont = FALSE;
case ENDCHARMETRICS:
cont = FALSE;
case ENDFONTMETRICS:
cont = FALSE;
error = normalEOF;
break;
case NOPE:
case ENDFONTMETRICS:
cont = FALSE;
error = normalEOF;
break;
case NOPE:
error = AFM_parseError;
break;
} /* switch */
} /* while */
error = AFM_parseError;
break;
} /* switch */
} /* while */
for (i = 0; i < 256; ++i)
cwi[i] = width;
for (i = 0; i < 256; ++i)
cwi[i] = width;
-
-} /* initializeArray */
-#endif
+
+} /* initializeArray */
+#endif
/************************* parseCharWidths **************************/
/* This function is called by "parseFile". It will parse the AFM File
/************************* parseCharWidths **************************/
/* This function is called by "parseFile". It will parse the AFM File
- * up to the "EndCharMetrics" keyword. It will save the character
+ * up to the "EndCharMetrics" keyword. It will save the character
* width info (as opposed to all of the character metric information)
* if requested by the caller of parseFile. Otherwise, it will just
* parse through the section without saving any information.
*
* width info (as opposed to all of the character metric information)
* if requested by the caller of parseFile. Otherwise, it will just
* parse through the section without saving any information.
*
- * If data is to be saved, parseCharWidths is passed in a pointer
+ * If data is to be saved, parseCharWidths is passed in a pointer
* to an array of widths that has already been initialized by the
* standard value for unmapped character codes. This function parses
* the Character Metrics section only storing the width information
* for the encoded characters into the array using the character code
* as the index into that array.
*
* to an array of widths that has already been initialized by the
* standard value for unmapped character codes. This function parses
* the Character Metrics section only storing the width information
* for the encoded characters into the array using the character code
* as the index into that array.
*
- * This function returns an error code specifying whether there was
- * a premature EOF or a parsing error. This return value is used by
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
* parseFile to determine if there is more file to parse.
*/
* parseFile to determine if there is more file to parse.
*/
static int
parseCharWidths (FILE *fp, register int *cwi)
static int
parseCharWidths (FILE *fp, register int *cwi)
BOOL cont = TRUE, save = (cwi != NULL);
int pos = 0, error = AFM_ok;
register char *keyword;
BOOL cont = TRUE, save = (cwi != NULL);
int pos = 0, error = AFM_ok;
register char *keyword;
while (cont)
{
keyword = token (fp);
while (cont)
{
keyword = token (fp);
if (!save)
/* get tokens until the end of the Char Metrics section without */
/* saving any of the data*/
if (!save)
/* get tokens until the end of the Char Metrics section without */
/* saving any of the data*/
- switch (recognize (keyword))
+ switch (recognize (keyword))
{
case ENDCHARMETRICS:
cont = FALSE;
{
case ENDCHARMETRICS:
cont = FALSE;
case ENDFONTMETRICS:
cont = FALSE;
error = normalEOF;
break;
case ENDFONTMETRICS:
cont = FALSE;
error = normalEOF;
break;
break;
} /* switch */
else
break;
} /* switch */
else
break;
case ENDCHARMETRICS:
cont = FALSE;
break;
case ENDCHARMETRICS:
cont = FALSE;
case ENDFONTMETRICS:
cont = FALSE;
error = normalEOF;
break;
case CHARNAME: /* eat values (so doesn't cause AFM_parseError) */
case ENDFONTMETRICS:
cont = FALSE;
error = normalEOF;
break;
case CHARNAME: /* eat values (so doesn't cause AFM_parseError) */
keyword = token (fp); keyword = token (fp);
keyword = token (fp); keyword = token (fp);
break;
keyword = token (fp); keyword = token (fp);
keyword = token (fp); keyword = token (fp);
break;
keyword = token (fp); keyword = token (fp);
break;
case NOPE:
keyword = token (fp); keyword = token (fp);
break;
case NOPE:
error = AFM_parseError;
break;
} /* switch */
} /* while */
error = AFM_parseError;
break;
} /* switch */
} /* while */
-
-} /* parseCharWidths */
+
+} /* parseCharWidths */
/************************* parseCharMetrics ************************/
/************************* parseCharMetrics ************************/
* parseCharMetrics is passed in a pointer to an array of records
* to hold information on a per character basis. This function
* parses the Character Metrics section storing all character
* parseCharMetrics is passed in a pointer to an array of records
* to hold information on a per character basis. This function
* parses the Character Metrics section storing all character
- * metric information for the ALL characters (mapped and unmapped)
+ * metric information for the ALL characters (mapped and unmapped)
- * This function returns an error code specifying whether there was
- * a premature EOF or a parsing error. This return value is used by
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
* parseFile to determine if there is more file to parse.
*/
* parseFile to determine if there is more file to parse.
*/
static int
parseCharMetrics (FILE *fp, register AFM_Font_info *fi)
static int
parseCharMetrics (FILE *fp, register AFM_Font_info *fi)
BOOL cont = TRUE, firstTime = TRUE;
int error = AFM_ok, count = 0;
register AFM_CharMetricInfo *temp = fi->cmi;
register char *keyword;
BOOL cont = TRUE, firstTime = TRUE;
int error = AFM_ok, count = 0;
register AFM_CharMetricInfo *temp = fi->cmi;
register char *keyword;
while (cont)
{
keyword = token (fp);
while (cont)
{
keyword = token (fp);
{
case COMMENT:
keyword = linetoken (fp);
{
case COMMENT:
keyword = linetoken (fp);
case CODE:
if (count < fi->numOfChars)
case CODE:
if (count < fi->numOfChars)
if (firstTime)
firstTime = FALSE;
else
if (firstTime)
firstTime = FALSE;
else
case XYWIDTH:
temp->wx = atoi (token (fp));
temp->wy = atoi (token (fp));
case XYWIDTH:
temp->wx = atoi (token (fp));
temp->wy = atoi (token (fp));
temp->wx = atoi (token (fp));
break;
temp->wx = atoi (token (fp));
break;
keyword = token (fp);
temp->name = (char *) malloc (strlen (keyword) + 1);
strcpy (temp->name, keyword);
break;
keyword = token (fp);
temp->name = (char *) malloc (strlen (keyword) + 1);
strcpy (temp->name, keyword);
break;
temp->charBBox.llx = atoi (token (fp));
temp->charBBox.lly = atoi (token (fp));
temp->charBBox.urx = atoi (token (fp));
temp->charBBox.llx = atoi (token (fp));
temp->charBBox.lly = atoi (token (fp));
temp->charBBox.urx = atoi (token (fp));
case LIGATURE: {
AFM_Ligature **tail = & (temp->ligs);
AFM_Ligature *node = *tail;
case LIGATURE: {
AFM_Ligature **tail = & (temp->ligs);
AFM_Ligature *node = *tail;
if (*tail != NULL)
{
while (node->next != NULL)
node = node->next;
if (*tail != NULL)
{
while (node->next != NULL)
node = node->next;
*tail = (AFM_Ligature *) calloc (1, sizeof (AFM_Ligature));
keyword = token (fp);
(*tail)->succ = (char *) malloc (strlen (keyword) + 1);
*tail = (AFM_Ligature *) calloc (1, sizeof (AFM_Ligature));
keyword = token (fp);
(*tail)->succ = (char *) malloc (strlen (keyword) + 1);
break; }
case ENDCHARMETRICS:
cont = FALSE;;
break; }
case ENDCHARMETRICS:
cont = FALSE;;
- break;
- case ENDFONTMETRICS:
+ break;
+ case ENDFONTMETRICS:
cont = FALSE;
error = normalEOF;
cont = FALSE;
error = normalEOF;
case NOPE:
default:
warning ("Unknown token");
case NOPE:
default:
warning ("Unknown token");
-
- error = AFM_parseError;
- break;
+
+ error = AFM_parseError;
+ break;
} /* switch */
} /* while */
} /* switch */
} /* while */
if ((error == AFM_ok) && (count != fi->numOfChars))
{
warning ("Incorrect char count");
error = AFM_parseError;
}
return (error);
if ((error == AFM_ok) && (count != fi->numOfChars))
{
warning ("Incorrect char count");
error = AFM_parseError;
}
return (error);
-
-} /* parseCharMetrics */
+
+} /* parseCharMetrics */
/************************* parseAFM_TrackKernData ***********************/
/************************* parseAFM_TrackKernData ***********************/
-/* This function is called by "parseFile". It will parse the AFM File
+/* This function is called by "parseFile". It will parse the AFM File
* up to the "EndTrackKern" or "EndKernData" keywords. It will save the
* track kerning data if requested by the caller of parseFile.
*
* parseAFM_TrackKernData is passed in a pointer to the FontInfo record.
* up to the "EndTrackKern" or "EndKernData" keywords. It will save the
* track kerning data if requested by the caller of parseFile.
*
* parseAFM_TrackKernData is passed in a pointer to the FontInfo record.
- * If data is to be saved, the FontInfo record will already contain
+ * If data is to be saved, the FontInfo record will already contain
* a valid pointer to storage for the track kerning data.
*
* a valid pointer to storage for the track kerning data.
*
- * This function returns an error code specifying whether there was
- * a premature EOF or a parsing error. This return value is used by
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
* parseFile to determine if there is more file to parse.
*/
* parseFile to determine if there is more file to parse.
*/
static int
parseAFM_TrackKernData (FILE *fp, register AFM_Font_info *fi)
static int
parseAFM_TrackKernData (FILE *fp, register AFM_Font_info *fi)
BOOL cont = TRUE, save = (fi->tkd != NULL);
int pos = 0, error = AFM_ok, tcount = 0;
register char *keyword;
BOOL cont = TRUE, save = (fi->tkd != NULL);
int pos = 0, error = AFM_ok, tcount = 0;
register char *keyword;
while (cont)
{
keyword = token (fp);
while (cont)
{
keyword = token (fp);
if (keyword == NULL)
{
error = AFM_earlyEOF;
if (keyword == NULL)
{
error = AFM_earlyEOF;
switch (recognize (keyword))
{
case COMMENT:
switch (recognize (keyword))
{
case COMMENT:
keyword = linetoken (fp);
break;
case TRACKKERN:
keyword = linetoken (fp);
break;
case TRACKKERN:
break;
} /* switch */
} /* while */
break;
} /* switch */
} /* while */
if (error == AFM_ok && tcount != fi->numOfTracks)
error = AFM_parseError;
if (error == AFM_ok && tcount != fi->numOfTracks)
error = AFM_parseError;
-
-} /* parseAFM_TrackKernData */
+
+} /* parseAFM_TrackKernData */
/************************* parseAFM_PairKernData ************************/
/************************* parseAFM_PairKernData ************************/
-/* This function is called by "parseFile". It will parse the AFM File
+/* This function is called by "parseFile". It will parse the AFM File
* up to the "EndKernPairs" or "EndKernData" keywords. It will save
* the pair kerning data if requested by the caller of parseFile.
*
* parseAFM_PairKernData is passed in a pointer to the FontInfo record.
* up to the "EndKernPairs" or "EndKernData" keywords. It will save
* the pair kerning data if requested by the caller of parseFile.
*
* parseAFM_PairKernData is passed in a pointer to the FontInfo record.
- * If data is to be saved, the FontInfo record will already contain
+ * If data is to be saved, the FontInfo record will already contain
* a valid pointer to storage for the pair kerning data.
*
* a valid pointer to storage for the pair kerning data.
*
- * This function returns an error code specifying whether there was
- * a premature EOF or a parsing error. This return value is used by
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
* parseFile to determine if there is more file to parse.
*/
* parseFile to determine if there is more file to parse.
*/
static int
parseAFM_PairKernData (FILE *fp, register AFM_Font_info *fi)
static int
parseAFM_PairKernData (FILE *fp, register AFM_Font_info *fi)
BOOL cont = TRUE, save = (fi->pkd != NULL);
int pos = 0, error = AFM_ok, pcount = 0;
register char *keyword;
BOOL cont = TRUE, save = (fi->pkd != NULL);
int pos = 0, error = AFM_ok, pcount = 0;
register char *keyword;
while (cont)
{
keyword = token (fp);
while (cont)
{
keyword = token (fp);
if (keyword == NULL)
{
error = AFM_earlyEOF;
if (keyword == NULL)
{
error = AFM_earlyEOF;
if (pcount < fi->numOfPairs)
{
keyword = token (fp);
if (pcount < fi->numOfPairs)
{
keyword = token (fp);
- fi->pkd[pos].name1 = (char *)
+ fi->pkd[pos].name1 = (char *)
malloc (strlen (keyword) + 1);
strcpy (fi->pkd[pos].name1, keyword);
keyword = token (fp);
malloc (strlen (keyword) + 1);
strcpy (fi->pkd[pos].name1, keyword);
keyword = token (fp);
- fi->pkd[pos].name2 = (char *)
+ fi->pkd[pos].name2 = (char *)
malloc (strlen (keyword) + 1);
strcpy (fi->pkd[pos].name2, keyword);
keyword = token (fp);
malloc (strlen (keyword) + 1);
strcpy (fi->pkd[pos].name2, keyword);
keyword = token (fp);
if (pcount < fi->numOfPairs)
{
keyword = token (fp);
if (pcount < fi->numOfPairs)
{
keyword = token (fp);
- fi->pkd[pos].name1 = (char *)
+ fi->pkd[pos].name1 = (char *)
malloc (strlen (keyword) + 1);
strcpy (fi->pkd[pos].name1, keyword);
keyword = token (fp);
malloc (strlen (keyword) + 1);
strcpy (fi->pkd[pos].name1, keyword);
keyword = token (fp);
- fi->pkd[pos].name2 = (char *)
+ fi->pkd[pos].name2 = (char *)
malloc (strlen (keyword) + 1);
strcpy (fi->pkd[pos].name2, keyword);
keyword = token (fp);
malloc (strlen (keyword) + 1);
strcpy (fi->pkd[pos].name2, keyword);
keyword = token (fp);
break;
} /* switch */
} /* while */
break;
} /* switch */
} /* while */
if (error == AFM_ok && pcount != fi->numOfPairs)
error = AFM_parseError;
if (error == AFM_ok && pcount != fi->numOfPairs)
error = AFM_parseError;
-
-} /* parseAFM_PairKernData */
+
+} /* parseAFM_PairKernData */
/************************* parseAFM_CompCharData **************************/
/************************* parseAFM_CompCharData **************************/
-/* This function is called by "parseFile". It will parse the AFM File
- * up to the "EndComposites" keyword. It will save the composite
+/* This function is called by "parseFile". It will parse the AFM File
+ * up to the "EndComposites" keyword. It will save the composite
* character data if requested by the caller of parseFile.
*
* character data if requested by the caller of parseFile.
*
- * parseAFM_CompCharData is passed in a pointer to the FontInfo record, and
+ * parseAFM_CompCharData is passed in a pointer to the FontInfo record, and
* a boolean representing if the data should be saved.
*
* This function will create the appropriate amount of storage for
* the composite character data and store a pointer to the storage
* in the FontInfo record.
*
* a boolean representing if the data should be saved.
*
* This function will create the appropriate amount of storage for
* the composite character data and store a pointer to the storage
* in the FontInfo record.
*
- * This function returns an error code specifying whether there was
- * a premature EOF or a parsing error. This return value is used by
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
* parseFile to determine if there is more file to parse.
*/
* parseFile to determine if there is more file to parse.
*/
static int
parseAFM_CompCharData (FILE *fp, register AFM_Font_info *fi)
static int
parseAFM_CompCharData (FILE *fp, register AFM_Font_info *fi)
BOOL cont = TRUE, firstTime = TRUE, save = (fi->ccd != NULL);
int pos = 0, j = 0, error = AFM_ok, ccount = 0, pcount = 0;
register char *keyword;
BOOL cont = TRUE, firstTime = TRUE, save = (fi->ccd != NULL);
int pos = 0, j = 0, error = AFM_ok, ccount = 0, pcount = 0;
register char *keyword;
while (cont)
{
keyword = token (fp);
while (cont)
{
keyword = token (fp);
pcount = 0;
if (firstTime) firstTime = FALSE;
else pos++;
pcount = 0;
if (firstTime) firstTime = FALSE;
else pos++;
- fi->ccd[pos].ccName = (char *)
+ fi->ccd[pos].ccName = (char *)
malloc (strlen (keyword) + 1);
strcpy (fi->ccd[pos].ccName, keyword);
keyword = token (fp);
malloc (strlen (keyword) + 1);
strcpy (fi->ccd[pos].ccName, keyword);
keyword = token (fp);
if (pcount < fi->ccd[pos].numOfPieces)
{
keyword = token (fp);
if (pcount < fi->ccd[pos].numOfPieces)
{
keyword = token (fp);
- fi->ccd[pos].pieces[j].AFM_PccName = (char *)
+ fi->ccd[pos].pieces[j].AFM_PccName = (char *)
malloc (strlen (keyword) + 1);
strcpy (fi->ccd[pos].pieces[j].AFM_PccName, keyword);
keyword = token (fp);
malloc (strlen (keyword) + 1);
strcpy (fi->ccd[pos].pieces[j].AFM_PccName, keyword);
keyword = token (fp);
break;
} /* switch */
} /* while */
break;
} /* switch */
} /* while */
if (error == AFM_ok && ccount != fi->numOfComps)
error = AFM_parseError;
if (error == AFM_ok && ccount != fi->numOfComps)
error = AFM_parseError;
-
-} /* parseAFM_CompCharData */
+} /* parseAFM_CompCharData */
-/*************************** 'PUBLIC' FUNCTION ********************/
+
+/*************************** 'PUBLIC' FUNCTION ********************/
void
AFM_free (AFM_Font_info *fi)
void
AFM_free (AFM_Font_info *fi)
/*************************** parseFile *****************************/
/*************************** parseFile *****************************/
-/* parseFile is the only 'public' procedure available. It is called
+/* parseFile is the only 'public' procedure available. It is called
* from an application wishing to get information from an AFM file.
* The caller of this function is responsible for locating and opening
* an AFM file and handling all errors associated with that task.
* from an application wishing to get information from an AFM file.
* The caller of this function is responsible for locating and opening
* an AFM file and handling all errors associated with that task.
* the data requested filled in), and a mask specifying which
* data from the AFM File should be saved in the FontInfo structure.
*
* the data requested filled in), and a mask specifying which
* data from the AFM File should be saved in the FontInfo structure.
*
- * The file will be parsed and the requested data will be stored in
+ * The file will be parsed and the requested data will be stored in
* a record of type FontInfo (refer to ParseAFM.h).
*
* a record of type FontInfo (refer to ParseAFM.h).
*
- * parseFile returns an error code as defined in parseAFM.h.
+ * parseFile returns an error code as defined in parseAFM.h.
- * The position of the read/write pointer associated with the file
+ * The position of the read/write pointer associated with the file
* pointer upon return of this function is undefined.
*/
int
AFM_parseFile (FILE *fp, AFM_Font_info **fi, int flags)
{
* pointer upon return of this function is undefined.
*/
int
AFM_parseFile (FILE *fp, AFM_Font_info **fi, int flags)
{
int code = AFM_ok; /* return code from each of the parsing routines */
int error = AFM_ok; /* used as the return code from this function */
int code = AFM_ok; /* return code from each of the parsing routines */
int error = AFM_ok; /* used as the return code from this function */
-
- register char *keyword; /* used to store a token */
-
-
- /* storage data for the global variable ident */
+
+ register char *keyword; /* used to store a token */
+
+
+ /* storage data for the global variable ident */
- ident = (char *) calloc (MAX_NAME, sizeof (char));
+ ident = (char *) calloc (MAX_NAME, sizeof (char));
if (ident == NULL)
{
error = AFM_storageProblem;
if (ident == NULL)
{
error = AFM_storageProblem;
{
error = AFM_storageProblem;
return error;
{
error = AFM_storageProblem;
return error;
{
(*fi)->gfi = (AFM_GlobalFontInfo *) calloc (1,
sizeof (AFM_GlobalFontInfo));
{
(*fi)->gfi = (AFM_GlobalFontInfo *) calloc (1,
sizeof (AFM_GlobalFontInfo));
{
error = AFM_storageProblem;
return error;
{
error = AFM_storageProblem;
return error;
/* The AFM File begins with Global Font Information. This section */
/* The AFM File begins with Global Font Information. This section */
- /* will be parsed whether or not information should be saved. */
- code = parseGlobals (fp, (*fi)->gfi);
-
+ /* will be parsed whether or not information should be saved. */
+ code = parseGlobals (fp, (*fi)->gfi);
+
if (code < 0)
error = code;
if (code < 0)
error = code;
/* The Global Font Information is followed by the Character Metrics */
/* section. Which procedure is used to parse this section depends on */
/* how much information should be saved. If all of the metrics info */
/* The Global Font Information is followed by the Character Metrics */
/* section. Which procedure is used to parse this section depends on */
/* how much information should be saved. If all of the metrics info */
/* is wanted, parseCharWidths is called. parseCharWidths will also */
/* be called in the case that no character data is to be saved, just */
/* to parse through the section. */
/* is wanted, parseCharWidths is called. parseCharWidths will also */
/* be called in the case that no character data is to be saved, just */
/* to parse through the section. */
if ((code != normalEOF) && (code != AFM_earlyEOF))
{
(*fi)->numOfChars = atoi (token (fp));
if (flags & (P_M ^ P_W))
{
if ((code != normalEOF) && (code != AFM_earlyEOF))
{
(*fi)->numOfChars = atoi (token (fp));
if (flags & (P_M ^ P_W))
{
- (*fi)->cmi = (AFM_CharMetricInfo *)
+ (*fi)->cmi = (AFM_CharMetricInfo *)
calloc ((*fi)->numOfChars, sizeof (AFM_CharMetricInfo));
if ((*fi)->cmi == NULL)
{
error = AFM_storageProblem;
return error;
}
calloc ((*fi)->numOfChars, sizeof (AFM_CharMetricInfo));
if ((*fi)->cmi == NULL)
{
error = AFM_storageProblem;
return error;
}
- code = parseCharMetrics (fp, *fi);
+ code = parseCharMetrics (fp, *fi);
}
else
{
if (flags & P_W)
}
else
{
if (flags & P_W)
- {
- (*fi)->cwi = (int *) calloc (256, sizeof (int));
- if ((*fi)->cwi == NULL)
+ {
+ (*fi)->cwi = (int *) calloc (256, sizeof (int));
+ if ((*fi)->cwi == NULL)
- error = AFM_storageProblem;
+ error = AFM_storageProblem;
code = parseCharWidths (fp, (*fi)->cwi);
} /* else */
} /* if */
code = parseCharWidths (fp, (*fi)->cwi);
} /* else */
} /* if */
if ((error != AFM_earlyEOF) && (code < 0))
error = code;
if ((error != AFM_earlyEOF) && (code < 0))
error = code;
/* The remaining sections of the AFM are optional. This code will */
/* look at the next keyword in the file to determine what section */
/* is next, and then allocate the appropriate amount of storage */
/* for the data (if the data is to be saved) and call the */
/* appropriate parsing routine to parse the section. */
/* The remaining sections of the AFM are optional. This code will */
/* look at the next keyword in the file to determine what section */
/* is next, and then allocate the appropriate amount of storage */
/* for the data (if the data is to be saved) and call the */
/* appropriate parsing routine to parse the section. */
while ((code != normalEOF) && (code != AFM_earlyEOF))
{
keyword = token (fp);
while ((code != normalEOF) && (code != AFM_earlyEOF))
{
keyword = token (fp);
if (flags & P_T)
{
(*fi)->numOfTracks = atoi (keyword);
if (flags & P_T)
{
(*fi)->numOfTracks = atoi (keyword);
- (*fi)->tkd = (AFM_TrackKernData *)
+ (*fi)->tkd = (AFM_TrackKernData *)
calloc ((*fi)->numOfTracks, sizeof (AFM_TrackKernData));
calloc ((*fi)->numOfTracks, sizeof (AFM_TrackKernData));
- if ((*fi)->tkd == NULL)
+ if ((*fi)->tkd == NULL)
- error = AFM_storageProblem;
+ error = AFM_storageProblem;
return (error);
}
} /* if */
return (error);
}
} /* if */
if (flags & P_P)
{
(*fi)->numOfPairs = atoi (keyword);
if (flags & P_P)
{
(*fi)->numOfPairs = atoi (keyword);
- (*fi)->pkd = (AFM_PairKernData *)
+ (*fi)->pkd = (AFM_PairKernData *)
calloc ((*fi)->numOfPairs, sizeof (AFM_PairKernData));
calloc ((*fi)->numOfPairs, sizeof (AFM_PairKernData));
- if ((*fi)->pkd == NULL)
+ if ((*fi)->pkd == NULL)
- error = AFM_storageProblem;
+ error = AFM_storageProblem;
return (error);
}
} /* if */
return (error);
}
} /* if */
case STARTCOMPOSITES:
keyword = token (fp);
if (flags & P_C)
case STARTCOMPOSITES:
keyword = token (fp);
if (flags & P_C)
(*fi)->numOfComps = atoi (keyword);
(*fi)->numOfComps = atoi (keyword);
- (*fi)->ccd = (AFM_CompCharData *)
+ (*fi)->ccd = (AFM_CompCharData *)
calloc ((*fi)->numOfComps, sizeof (AFM_CompCharData));
calloc ((*fi)->numOfComps, sizeof (AFM_CompCharData));
- if ((*fi)->ccd == NULL)
+ if ((*fi)->ccd == NULL)
- error = AFM_storageProblem;
+ error = AFM_storageProblem;
return (error);
}
} /* if */
return (error);
}
} /* if */
- code = parseAFM_CompCharData (fp, *fi);
- break;
+ code = parseAFM_CompCharData (fp, *fi);
+ break;
case ENDFONTMETRICS:
code = normalEOF;
break;
case ENDFONTMETRICS:
code = normalEOF;
break;
code = AFM_parseError;
break;
} /* switch */
code = AFM_parseError;
break;
} /* switch */
if ((error != AFM_earlyEOF) && (code < 0))
error = code;
if ((error != AFM_earlyEOF) && (code < 0))
error = code;
if ((error != AFM_earlyEOF) && (code < 0))
error = code;
if ((error != AFM_earlyEOF) && (code < 0))
error = code;
if (ident != NULL) { free (ident); ident = NULL; }
if (ident != NULL) { free (ident); ident = NULL; }
-#(ly:set-option 'old-relative)
\version "2.4.0"
\encoding "latin1"
\header {
\version "2.4.0"
\encoding "latin1"
\header {
{
SCM at = scm_list_3 (ly_symbol2scm ("char"),
self_scm (),
{
SCM at = scm_list_3 (ly_symbol2scm ("char"),
self_scm (),
+ scm_int2num (index_to_ascii (code)));
Box b = get_indexed_char (code);
return Stencil (b, at);
}
Box b = get_indexed_char (code);
return Stencil (b, at);
}
system-start-delimiter.cc -- implement System_start_delimiter
system-start-delimiter.cc -- implement System_start_delimiter
source file of the GNU LilyPond music typesetter
source file of the GNU LilyPond music typesetter
(c) 2000--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
(c) 2000--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
#include "lookup.hh"
Stencil
#include "lookup.hh"
Stencil
-System_start_delimiter::staff_bracket (Grob*me,Real height)
+System_start_delimiter::staff_bracket (Grob*me,Real height)
{
Real arc_height = scm_to_double (me->get_property ("arch-height")) ;
{
Real arc_height = scm_to_double (me->get_property ("arch-height")) ;
SCM at = scm_list_n (ly_symbol2scm ("bracket"),
me->get_property ("arch-angle"),
me->get_property ("arch-width"),
SCM at = scm_list_n (ly_symbol2scm ("bracket"),
me->get_property ("arch-angle"),
me->get_property ("arch-width"),
Another thing:
In system-start-delimiter.cc I see the line
Another thing:
In system-start-delimiter.cc I see the line
(arc_height changes the x-axis-size of arc ; arc_width changes the
y-axis-size)
Will not fix it since I'm not sure.
(arc_height changes the x-axis-size of arc ; arc_width changes the
y-axis-size)
Will not fix it since I'm not sure.
*/
Real h = height + 2 * arc_height;
*/
Real h = height + 2 * arc_height;
if (!v.is_empty ())
count ++;
}
if (!v.is_empty ())
count ++;
}
if (count <= 1)
{
me->suicide ();
if (count <= 1)
{
me->suicide ();
-MAKE_SCHEME_CALLBACK (System_start_delimiter,print,1);
+MAKE_SCHEME_CALLBACK (System_start_delimiter, print, 1);
SCM
System_start_delimiter::print (SCM smob)
{
SCM
System_start_delimiter::print (SCM smob)
{
- Spanner * me = unsmob_spanner (smob);
+ Spanner *me = unsmob_spanner (smob);
SCM s = me->get_property ("glyph");
if (!scm_is_string (s))
return SCM_EOL;
SCM gsym = scm_string_to_symbol (s) ;
SCM s = me->get_property ("glyph");
if (!scm_is_string (s))
return SCM_EOL;
SCM gsym = scm_string_to_symbol (s) ;
Real staff_space = Staff_symbol_referencer::staff_space (me);
SCM elts = me->get_property ("elements");
Real staff_space = Staff_symbol_referencer::staff_space (me);
SCM elts = me->get_property ("elements");
}
ext -= me->relative_coordinate (common, Y_AXIS);
}
ext -= me->relative_coordinate (common, Y_AXIS);
-
- Real l = ext.length () / staff_space;
-
+
+ Real len = ext.length () / staff_space;
+
- || (robust_scm2double (me->get_property ("collapse-height"), 0.0) >= l))
+ || (robust_scm2double (me->get_property ("collapse-height"), 0.0) >= len))
{
me->suicide ();
return SCM_EOL;
{
me->suicide ();
return SCM_EOL;
Stencil m;
if (gsym== ly_symbol2scm ("bracket"))
Stencil m;
if (gsym== ly_symbol2scm ("bracket"))
- m = staff_bracket (me,l);
+ m = staff_bracket (me, len);
else if (gsym == ly_symbol2scm ("brace"))
else if (gsym == ly_symbol2scm ("brace"))
- m = staff_brace (me,l);
+ m = staff_brace (me, len);
else if (gsym == ly_symbol2scm ("bar-line"))
else if (gsym == ly_symbol2scm ("bar-line"))
- m = simple_bar (me,l);
-
+ m = simple_bar (me, len);
+
m.translate_axis (ext.center (), Y_AXIS);
return m.smobbed_copy ();
}
Stencil
m.translate_axis (ext.center (), Y_AXIS);
return m.smobbed_copy ();
}
Stencil
-System_start_delimiter::staff_brace (Grob*me, Real y)
+System_start_delimiter::staff_brace (Grob *me, Real y)
/* We go through the style sheet to lookup the font file
name. This is better than using find_font directly,
esp. because that triggers mktextfm for non-existent
fonts. */
/* We go through the style sheet to lookup the font file
name. This is better than using find_font directly,
esp. because that triggers mktextfm for non-existent
fonts. */
- SCM fam = scm_cons (ly_symbol2scm ("font-encoding"), ly_symbol2scm ("fetaBraces"));
-
+ SCM fam = scm_cons (ly_symbol2scm ("font-encoding"),
+ ly_symbol2scm ("fetaBraces"));
+
SCM alist = scm_list_n (fam, SCM_UNDEFINED);
fm = select_font (me->get_layout (), scm_list_n (alist, SCM_UNDEFINED));
SCM alist = scm_list_n (fam, SCM_UNDEFINED);
fm = select_font (me->get_layout (), scm_list_n (alist, SCM_UNDEFINED));
int hi = (fm->count () - 1) >? 2;
Box b;
int hi = (fm->count () - 1) >? 2;
Box b;
return Stencil (b, stil.expr ());
}
return Stencil (b, stil.expr ());
}
ADD_INTERFACE (System_start_delimiter,"system-start-delimiter-interface",
ADD_INTERFACE (System_start_delimiter,"system-start-delimiter-interface",
+%
+% feta-beugel.mf -- [Staff] braces
+%
+% source file of the Feta (not an acronym for Font-En-Tja)
+% pretty-but-neat music font
+%
+% (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+% Jan Nieuwenhuizen <janneke@gnu.org>
input feta-autometric;
input feta-macros;
input feta-autometric;
input feta-macros;
-staffsize# := 20 pt#; %% arbitrary.
-
+staffsize# := 20 pt#; %% arbitrary.
input feta-params;
def abc_encode_int (expr i) =
if i > 0:
input feta-params;
def abc_encode_int (expr i) =
if i > 0:
- abc_encode_int(i div 26)&char(65 + i mod 26)
+ abc_encode_int (i div 26) & char (65 + i mod 26)
% we must let the design increase for each
% font to make sure that mftrace doesn't jack up the resolution too highly
% for the longer braces.
% we must let the design increase for each
% font to make sure that mftrace doesn't jack up the resolution too highly
% for the longer braces.
-fet_beginfont("feta-braces-" &char(97 + font_count), (font_count + 1)* 15,
- "fetaBraces");
+fet_beginfont ("feta-braces-" & char (97 + font_count), (font_count + 1) * 15,
+ "fetaBraces");
def draw_brace (expr height_sharp, width_sharp, slt_sharp) =
def draw_brace (expr height_sharp, width_sharp, slt_sharp) =
slt# := slt_sharp;
%% +1 is needed because fet_beginchar increments after dumping the strings.
slt# := slt_sharp;
%% +1 is needed because fet_beginchar increments after dumping the strings.
-fet_beginchar("brace number "&(decimal (code + 1)), "brace"&abc_encode_int(code+1),
- "brace"&abc_encode_int (code+1))
+fet_beginchar ("brace number " & (decimal (code + 1)),
+ "brace" & abc_encode_int (code - 64),
+ "brace" & abc_encode_int (code - 64))
set_char_box (0, width#, height#/2, height#/2);
set_char_box (0, width#, height#/2, height#/2);
(ly:clear-keys)
(ly:define-keys `~S)
;;; TWEAKS \n
(ly:clear-keys)
(ly:define-keys `~S)
;;; TWEAKS \n
(ly:define-tweaks `~S)"
(ly:dumper-definitions dumper)
(ly:define-tweaks `~S)"
(ly:dumper-definitions dumper)
;;design:20.0
(define (text font string)
;;design:20.0
(define (text font string)
+ (stderr "TEXT:~S\n" string)
+ (if (string? string)
+ (stderr "CHARS:~S\n" (map char->integer (string->list string)))
+ (stderr "CHAR:~S\n" (char->integer (car string))))
(make <gnome-canvas-text>
#:parent (canvas-root)
(make <gnome-canvas-text>
#:parent (canvas-root)